From b570602b82c941ac012074c1104482866482095b Mon Sep 17 00:00:00 2001 From: Facundo Lerena Date: Wed, 6 Dec 2023 11:12:38 -0300 Subject: [PATCH] removed old name --- detectors/core-mem-forget/Cargo.toml | 20 ---- detectors/core-mem-forget/src/lib.rs | 98 ------------------- .../remediated-example/Cargo.toml | 30 ------ .../remediated-example/src/lib.rs | 37 ------- .../vulnerable-example/Cargo.toml | 30 ------ .../vulnerable-example/src/lib.rs | 37 ------- 6 files changed, 252 deletions(-) delete mode 100644 detectors/core-mem-forget/Cargo.toml delete mode 100644 detectors/core-mem-forget/src/lib.rs delete mode 100644 test-cases/core-mem-forget/core-mem-forget-1/remediated-example/Cargo.toml delete mode 100644 test-cases/core-mem-forget/core-mem-forget-1/remediated-example/src/lib.rs delete mode 100644 test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/Cargo.toml delete mode 100644 test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/src/lib.rs diff --git a/detectors/core-mem-forget/Cargo.toml b/detectors/core-mem-forget/Cargo.toml deleted file mode 100644 index fc07fb1e..00000000 --- a/detectors/core-mem-forget/Cargo.toml +++ /dev/null @@ -1,20 +0,0 @@ -[package] -name = "core-mem-forget" -version = "0.1.0" -edition = "2021" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -clippy_utils = { workspace = true } -dylint_linting = { workspace = true } -if_chain = { workspace = true } - -scout-audit-internal = { workspace = true } - -[dev-dependencies] -dylint_testing = { workspace = true } - -[package.metadata.rust-analyzer] -rustc_private = true diff --git a/detectors/core-mem-forget/src/lib.rs b/detectors/core-mem-forget/src/lib.rs deleted file mode 100644 index 8d2f9c30..00000000 --- a/detectors/core-mem-forget/src/lib.rs +++ /dev/null @@ -1,98 +0,0 @@ -#![feature(rustc_private)] - -extern crate rustc_ast; -extern crate rustc_hir; -extern crate rustc_span; - -use if_chain::if_chain; -use rustc_ast::{Expr, ExprKind, Item, NodeId}; -use rustc_lint::{EarlyContext, EarlyLintPass}; -use rustc_span::sym; -use scout_audit_internal::Detector; - -dylint_linting::impl_pre_expansion_lint! { - /// ### What it does - /// Checks for `core::mem::forget` usage. - /// ### Why is this bad? - /// This is a bad practice because it can lead to memory leaks, resource leaks and logic errors. - /// ### Example - /// ```rust - /// pub fn forget_something(n: WithoutCopy) -> u64 { - /// core::mem::forget(n); - /// 0 - /// } - /// ``` - /// - /// Use instead: - /// ```rust - /// pub fn forget_something(n: WithoutCopy) -> u64 { - /// let _ = n; - /// 0 - /// } - /// ``` - - pub CORE_MEM_FORGET, - Warn, - Detector::CoreMemForget.get_lint_message(), - CoreMemForget::default() -} - -#[derive(Default)] -pub struct CoreMemForget { - stack: Vec, -} - -impl EarlyLintPass for CoreMemForget { - fn check_item(&mut self, _cx: &EarlyContext, item: &Item) { - if self.in_test_item() || is_test_item(item) { - self.stack.push(item.id); - } - } - - fn check_expr(&mut self, cx: &EarlyContext, expr: &Expr) { - if_chain! { - if !self.in_test_item(); - if let ExprKind::Call(a, _) = &expr.kind; - if let ExprKind::Path(_, path) = &a.kind; - if path.segments.len() == 3; - if path.segments[0].ident.name.to_string() == "core"; - if path.segments[1].ident.name.to_string() == "mem"; - if path.segments[2].ident.name.to_string() == "forget"; - then { - Detector::CoreMemForget.span_lint_and_help( - cx, - CORE_MEM_FORGET, - expr.span, - "Instead, use the `let _ = ...` pattern or `.drop` method to forget the value.", - ); - } - } - } -} - -fn is_test_item(item: &Item) -> bool { - item.attrs.iter().any(|attr| { - if attr.has_name(sym::test) { - true - } else { - if_chain! { - if attr.has_name(sym::cfg); - if let Some(items) = attr.meta_item_list(); - if let [item] = items.as_slice(); - if let Some(feature_item) = item.meta_item(); - if feature_item.has_name(sym::test); - then { - true - } else { - false - } - } - } - }) -} - -impl CoreMemForget { - fn in_test_item(&self) -> bool { - !self.stack.is_empty() - } -} diff --git a/test-cases/core-mem-forget/core-mem-forget-1/remediated-example/Cargo.toml b/test-cases/core-mem-forget/core-mem-forget-1/remediated-example/Cargo.toml deleted file mode 100644 index 9d6db30e..00000000 --- a/test-cases/core-mem-forget/core-mem-forget-1/remediated-example/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "core-mem-forget-1-remediated" -version = "0.1.0" -edition = "2021" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -soroban-sdk = { version = "20.0.0-rc2" } - -[dev_dependencies] -soroban-sdk = { version = "20.0.0-rc2", features = ["testutils"] } - -[features] -testutils = ["soroban-sdk/testutils"] - -[profile.release] -opt-level = "z" -overflow-checks = true -debug = 0 -strip = "symbols" -debug-assertions = false -panic = "abort" -codegen-units = 1 -lto = true - -[profile.release-with-logs] -inherits = "release" -debug-assertions = true diff --git a/test-cases/core-mem-forget/core-mem-forget-1/remediated-example/src/lib.rs b/test-cases/core-mem-forget/core-mem-forget-1/remediated-example/src/lib.rs deleted file mode 100644 index 0e6fab6b..00000000 --- a/test-cases/core-mem-forget/core-mem-forget-1/remediated-example/src/lib.rs +++ /dev/null @@ -1,37 +0,0 @@ -#![no_std] -use soroban_sdk::{contract, contractimpl, contracttype}; - -#[contract] -pub struct CoreMemForget; - -#[contracttype] -#[derive(Eq, PartialEq)] -pub struct WithoutCopy { - pub a: u64, - pub b: u64, -} - -#[contractimpl] -impl CoreMemForget { - pub fn forget_something(n: WithoutCopy) -> u64 { - let _ = n; - 0 - } -} - -#[cfg(test)] -mod tests { - use crate::*; - - #[test] - fn test_forget_something() { - // Given - let test_value: WithoutCopy = WithoutCopy { a: 80, b: 60 }; - - // When - let result = CoreMemForget::forget_something(test_value); - - // Then - assert_eq!(result, 0); - } -} diff --git a/test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/Cargo.toml b/test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/Cargo.toml deleted file mode 100644 index 9b848f19..00000000 --- a/test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "core-mem-forget-1-vulnerable" -version = "0.1.0" -edition = "2021" - -[lib] -crate-type = ["cdylib"] - -[dependencies] -soroban-sdk = { version = "20.0.0-rc2" } - -[dev_dependencies] -soroban-sdk = { version = "20.0.0-rc2", features = ["testutils"] } - -[features] -testutils = ["soroban-sdk/testutils"] - -[profile.release] -opt-level = "z" -overflow-checks = true -debug = 0 -strip = "symbols" -debug-assertions = false -panic = "abort" -codegen-units = 1 -lto = true - -[profile.release-with-logs] -inherits = "release" -debug-assertions = true diff --git a/test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/src/lib.rs b/test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/src/lib.rs deleted file mode 100644 index 6d993d95..00000000 --- a/test-cases/core-mem-forget/core-mem-forget-1/vulnerable-example/src/lib.rs +++ /dev/null @@ -1,37 +0,0 @@ -#![no_std] -use soroban_sdk::{contract, contractimpl, contracttype}; - -#[contract] -pub struct CoreMemForget; - -#[contracttype] -#[derive(Eq, PartialEq)] -pub struct WithoutCopy { - pub a: u64, - pub b: u64, -} - -#[contractimpl] -impl CoreMemForget { - pub fn forget_something(n: WithoutCopy) -> u64 { - core::mem::forget(n); - 0 - } -} - -#[cfg(test)] -mod tests { - use crate::*; - - #[test] - fn test_forget_something() { - // Given - let test_value: WithoutCopy = WithoutCopy { a: 80, b: 60 }; - - // When - let result = CoreMemForget::forget_something(test_value); - - // Then - assert_eq!(result, 0); - } -}