[INFO] fetching crate solana_fender 0.4.2... [INFO] testing solana_fender-0.4.2 against master#cdb45c87e2cd43495379f7e867e3cc15dcee9f93 for pr-145838-1 [INFO] extracting crate solana_fender 0.4.2 into /workspace/builds/worker-7-tc1/source [INFO] started tweaking crates.io crate solana_fender 0.4.2 [INFO] finished tweaking crates.io crate solana_fender 0.4.2 [INFO] tweaked toml for crates.io crate solana_fender 0.4.2 written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate solana_fender 0.4.2 on toolchain cdb45c87e2cd43495379f7e867e3cc15dcee9f93 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cdb45c87e2cd43495379f7e867e3cc15dcee9f93" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate solana_fender 0.4.2 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cdb45c87e2cd43495379f7e867e3cc15dcee9f93" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+cdb45c87e2cd43495379f7e867e3cc15dcee9f93" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 2f670866ea38553c0f74b23cda61e7a7dabfcc1b296612761719bf1b9a4e3700 [INFO] running `Command { std: "docker" "start" "-a" "2f670866ea38553c0f74b23cda61e7a7dabfcc1b296612761719bf1b9a4e3700", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "2f670866ea38553c0f74b23cda61e7a7dabfcc1b296612761719bf1b9a4e3700", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2f670866ea38553c0f74b23cda61e7a7dabfcc1b296612761719bf1b9a4e3700", kill_on_drop: false }` [INFO] [stdout] 2f670866ea38553c0f74b23cda61e7a7dabfcc1b296612761719bf1b9a4e3700 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+cdb45c87e2cd43495379f7e867e3cc15dcee9f93" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] b5e456c717365a3c31ea7f3053221692d5606f74d24214de5866fd40d55ef979 [INFO] running `Command { std: "docker" "start" "-a" "b5e456c717365a3c31ea7f3053221692d5606f74d24214de5866fd40d55ef979", kill_on_drop: false }` [INFO] [stderr] Compiling unicode-ident v1.0.17 [INFO] [stderr] Compiling proc-macro2 v1.0.93 [INFO] [stderr] Compiling serde v1.0.218 [INFO] [stderr] Compiling serde_json v1.0.139 [INFO] [stderr] Compiling anyhow v1.0.96 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling heck v0.3.3 [INFO] [stderr] Compiling bs58 v0.5.1 [INFO] [stderr] Compiling clap_builder v4.5.30 [INFO] [stderr] Compiling quote v1.0.38 [INFO] [stderr] Compiling syn v2.0.98 [INFO] [stderr] Compiling serde_derive v1.0.218 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling clap_derive v4.5.28 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling clap v4.5.30 [INFO] [stderr] Compiling anchor-syn v0.29.0 [INFO] [stderr] Compiling solana_fender v0.4.2 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzers/mod.rs:59:5 [INFO] [stdout] | [INFO] [stdout] 58 | pub enum Certainty { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 59 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 60 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 61 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Certainty` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MissingOwnerCheck` is never constructed [INFO] [stdout] --> src/analyzers/missing_owner.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct MissingOwnerCheck; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OwnerCheckVisitor` is never constructed [INFO] [stdout] --> src/analyzers/missing_owner.rs:44:8 [INFO] [stdout] | [INFO] [stdout] 44 | struct OwnerCheckVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ReentrancyAnalyzer` is never constructed [INFO] [stdout] --> src/analyzers/reentrancy.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct ReentrancyAnalyzer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ReentrancyVisitor` is never constructed [INFO] [stdout] --> src/analyzers/reentrancy.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | struct ReentrancyVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_cpi_calls` is never used [INFO] [stdout] --> src/analyzers/reentrancy.rs:47:4 [INFO] [stdout] | [INFO] [stdout] 47 | fn contains_cpi_calls(block: &syn::Block) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_reentry_protection` is never used [INFO] [stdout] --> src/analyzers/reentrancy.rs:71:4 [INFO] [stdout] | [INFO] [stdout] 71 | fn has_reentry_protection(attrs: &[Attribute]) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `UnauthorizedAccessAnalyzer` is never constructed [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct UnauthorizedAccessAnalyzer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AuthorizationVisitor` is never constructed [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:9:8 [INFO] [stdout] | [INFO] [stdout] 9 | struct AuthorizationVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_authority_check` is never used [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:172:4 [INFO] [stdout] | [INFO] [stdout] 172 | fn has_authority_check(block: &syn::Block) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_signer_type` is never used [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:232:4 [INFO] [stdout] | [INFO] [stdout] 232 | fn is_signer_type(ty: &Type) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_struct_name_from_context` is never used [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:253:4 [INFO] [stdout] | [INFO] [stdout] 253 | fn extract_struct_name_from_context(type_str: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `IntegerOverflowAnalyzer` is never constructed [INFO] [stdout] --> src/analyzers/integer_overflow.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct IntegerOverflowAnalyzer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OverflowVisitor` is never constructed [INFO] [stdout] --> src/analyzers/integer_overflow.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | struct OverflowVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_arithmetic_op` is never used [INFO] [stdout] --> src/analyzers/integer_overflow.rs:37:4 [INFO] [stdout] | [INFO] [stdout] 37 | fn is_arithmetic_op(op: &BinOp) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_checked_arithmetic` is never used [INFO] [stdout] --> src/analyzers/integer_overflow.rs:46:4 [INFO] [stdout] | [INFO] [stdout] 46 | fn is_checked_arithmetic(expr: &syn::ExprBinary) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `expr_to_string` is never used [INFO] [stdout] --> src/analyzers/integer_overflow.rs:58:4 [INFO] [stdout] | [INFO] [stdout] 58 | fn expr_to_string(expr: &syn::ExprBinary) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TypeCosplay` is never constructed [INFO] [stdout] --> src/analyzers/type_cosplay.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct TypeCosplay; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TypeCosplayVisitor` is never constructed [INFO] [stdout] --> src/analyzers/type_cosplay.rs:43:8 [INFO] [stdout] | [INFO] [stdout] 43 | struct TypeCosplayVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_vulnerabilities` is never used [INFO] [stdout] --> src/analyzers/type_cosplay.rs:53:8 [INFO] [stdout] | [INFO] [stdout] 52 | impl<'a> TypeCosplayVisitor<'a> { [INFO] [stdout] | ------------------------------- method in this implementation [INFO] [stdout] 53 | fn analyze_vulnerabilities(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `check_account_data_usage` is never used [INFO] [stdout] --> src/analyzers/type_cosplay.rs:300:8 [INFO] [stdout] | [INFO] [stdout] 299 | impl<'a> TypeCosplayVisitor<'a> { [INFO] [stdout] | ------------------------------- method in this implementation [INFO] [stdout] 300 | fn check_account_data_usage(&mut self, expr: &syn::Expr, span: proc_macro2::Span) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PdaSharing` is never constructed [INFO] [stdout] --> src/analyzers/pda_sharing.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct PdaSharing; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PdaSharingVisitor` is never constructed [INFO] [stdout] --> src/analyzers/pda_sharing.rs:36:8 [INFO] [stdout] | [INFO] [stdout] 36 | struct PdaSharingVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_seed_array` is never used [INFO] [stdout] --> src/analyzers/pda_sharing.rs:112:8 [INFO] [stdout] | [INFO] [stdout] 111 | impl<'a> PdaSharingVisitor<'a> { [INFO] [stdout] | ------------------------------ method in this implementation [INFO] [stdout] 112 | fn analyze_seed_array(&mut self, array: &ExprArray) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `InvalidSysvarAccounts` is never constructed [INFO] [stdout] --> src/analyzers/invalid_sysvar_accounts.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InvalidSysvarAccounts; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SysvarAccountsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/invalid_sysvar_accounts.rs:37:8 [INFO] [stdout] | [INFO] [stdout] 37 | struct SysvarAccountsVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ClosingAccounts` is never constructed [INFO] [stdout] --> src/analyzers/closing_accounts.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct ClosingAccounts; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ClosingAccountsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/closing_accounts.rs:93:8 [INFO] [stdout] | [INFO] [stdout] 93 | struct ClosingAccountsVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MissingBumpSeedCanonicalization` is never constructed [INFO] [stdout] --> src/analyzers/bump_seed_canonicalization.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct MissingBumpSeedCanonicalization; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BumpSeedVisitor` is never constructed [INFO] [stdout] --> src/analyzers/bump_seed_canonicalization.rs:37:8 [INFO] [stdout] | [INFO] [stdout] 37 | struct BumpSeedVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DuplicateMutableAccounts` is never constructed [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct DuplicateMutableAccounts; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountStructCollector` is never constructed [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AccountStructCollector<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DuplicateMutableAccountsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:84:8 [INFO] [stdout] | [INFO] [stdout] 84 | struct DuplicateMutableAccountsVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `find_context_struct_for_expr` is never used [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:288:8 [INFO] [stdout] | [INFO] [stdout] 286 | impl DuplicateMutableAccountsVisitor { [INFO] [stdout] | ------------------------------------ method in this implementation [INFO] [stdout] 287 | // Helper method to find the context struct for an expression [INFO] [stdout] 288 | fn find_context_struct_for_expr(&self, _expr: &ExprBinary) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ArbitraryCpi` is never constructed [INFO] [stdout] --> src/analyzers/arbitrary_cpi.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct ArbitraryCpi; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ArbitraryCpiVisitor` is never constructed [INFO] [stdout] --> src/analyzers/arbitrary_cpi.rs:39:8 [INFO] [stdout] | [INFO] [stdout] 39 | struct ArbitraryCpiVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountInitialization` is never constructed [INFO] [stdout] --> src/analyzers/account_initialization.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct AccountInitialization; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_recommended_implementation` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:51:4 [INFO] [stdout] | [INFO] [stdout] 51 | fn is_recommended_implementation(path: &Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `InitStructsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/account_initialization.rs:56:8 [INFO] [stdout] | [INFO] [stdout] 56 | struct InitStructsVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountInitializationVisitor` is never constructed [INFO] [stdout] --> src/analyzers/account_initialization.rs:95:8 [INFO] [stdout] | [INFO] [stdout] 95 | struct AccountInitializationVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_context_struct_name` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:264:4 [INFO] [stdout] | [INFO] [stdout] 264 | fn extract_context_struct_name(param_type: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `check_for_anchor_init_attributes` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:275:4 [INFO] [stdout] | [INFO] [stdout] 275 | fn check_for_anchor_init_attributes(func: &ItemFn, has_init: &mut bool) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_initialization_function` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:295:4 [INFO] [stdout] | [INFO] [stdout] 295 | fn is_initialization_function(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_initialization_pattern` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:309:4 [INFO] [stdout] | [INFO] [stdout] 309 | fn contains_initialization_pattern(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_deserialization_method` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:322:4 [INFO] [stdout] | [INFO] [stdout] 322 | fn is_deserialization_method(method_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_reinitialization_check` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:331:4 [INFO] [stdout] | [INFO] [stdout] 331 | fn contains_reinitialization_check(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_anchor_account_attribute` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:349:4 [INFO] [stdout] | [INFO] [stdout] 349 | fn has_anchor_account_attribute(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountDataMatching` is never constructed [INFO] [stdout] --> src/analyzers/account_data_matching.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct AccountDataMatching; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountDataMatchingVisitor` is never constructed [INFO] [stdout] --> src/analyzers/account_data_matching.rs:37:8 [INFO] [stdout] | [INFO] [stdout] 37 | struct AccountDataMatchingVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `path_to_string` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:154:4 [INFO] [stdout] | [INFO] [stdout] 154 | fn path_to_string(path: &syn::Path) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_owner_check` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:162:4 [INFO] [stdout] | [INFO] [stdout] 162 | fn is_owner_check(left: &Expr, right: &Expr) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_authority_key` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:177:4 [INFO] [stdout] | [INFO] [stdout] 177 | fn contains_authority_key(expr: &Expr) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_token_owner` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:198:4 [INFO] [stdout] | [INFO] [stdout] 198 | fn contains_token_owner(expr: &Expr) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `asts` and `root_path` are never read [INFO] [stdout] --> src/models/mod.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct Program { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 14 | pub asts: HashMap, [INFO] [stdout] | ^^^^ [INFO] [stdout] 15 | pub root_path: std::path::PathBuf, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Program` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `from_file` is never used [INFO] [stdout] --> src/models/mod.rs:104:12 [INFO] [stdout] | [INFO] [stdout] 18 | impl Program { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 104 | pub fn from_file(file_path: PathBuf) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MarkdownDocument` is never constructed [INFO] [stdout] --> src/models/markdown.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct MarkdownDocument { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MarkdownSection` is never constructed [INFO] [stdout] --> src/models/markdown.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct MarkdownSection { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MarkdownTable` is never constructed [INFO] [stdout] --> src/models/markdown.rs:20:12 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct MarkdownTable { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_section`, `to_string`, and `save_to_file` are never used [INFO] [stdout] --> src/models/markdown.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 25 | impl MarkdownDocument { [INFO] [stdout] | --------------------- associated items in this implementation [INFO] [stdout] 26 | /// Create a new markdown document with a title [INFO] [stdout] 27 | pub fn new(title: &str) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 35 | pub fn add_section(&mut self, section: MarkdownSection) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn save_to_file(&self, path: &Path) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_content`, `add_code_block`, `add_subsection`, and `to_string` are never used [INFO] [stdout] --> src/models/markdown.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 58 | impl MarkdownSection { [INFO] [stdout] | -------------------- associated items in this implementation [INFO] [stdout] 59 | /// Create a new markdown section with a heading [INFO] [stdout] 60 | pub fn new(heading: &str, level: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn add_content(&mut self, content: &str) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn add_code_block(&mut self, code: &str, language: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 84 | pub fn add_subsection(&mut self, subsection: MarkdownSection) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_row`, and `to_string` are never used [INFO] [stdout] --> src/models/markdown.rs:109:12 [INFO] [stdout] | [INFO] [stdout] 107 | impl MarkdownTable { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 108 | /// Create a new markdown table with headers [INFO] [stdout] 109 | pub fn new(headers: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 117 | pub fn add_row(&mut self, row: Vec) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 125 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_analysis_report` is never used [INFO] [stdout] --> src/models/markdown.rs:160:8 [INFO] [stdout] | [INFO] [stdout] 160 | pub fn create_analysis_report( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Finding` is never constructed [INFO] [stdout] --> src/models/markdown.rs:260:12 [INFO] [stdout] | [INFO] [stdout] 260 | pub struct Finding { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/models/markdown.rs:270:12 [INFO] [stdout] | [INFO] [stdout] 269 | impl Finding { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 270 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 26.01s [INFO] running `Command { std: "docker" "inspect" "b5e456c717365a3c31ea7f3053221692d5606f74d24214de5866fd40d55ef979", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b5e456c717365a3c31ea7f3053221692d5606f74d24214de5866fd40d55ef979", kill_on_drop: false }` [INFO] [stdout] b5e456c717365a3c31ea7f3053221692d5606f74d24214de5866fd40d55ef979 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+cdb45c87e2cd43495379f7e867e3cc15dcee9f93" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e1f4f39cd357c685cca4a4cc02375d8e18e20a49fb5a3df7a6664870704e4867 [INFO] running `Command { std: "docker" "start" "-a" "e1f4f39cd357c685cca4a4cc02375d8e18e20a49fb5a3df7a6664870704e4867", kill_on_drop: false }` [INFO] [stderr] Compiling solana_fender v0.4.2 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::collections::HashMap` [INFO] [stdout] --> src/main.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::collections::HashMap; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stdout] --> src/analyzers/mod.rs:59:5 [INFO] [stdout] | [INFO] [stdout] 58 | pub enum Certainty { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 59 | High, [INFO] [stdout] | ^^^^ [INFO] [stdout] 60 | Medium, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 61 | Low, [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Certainty` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MissingOwnerCheck` is never constructed [INFO] [stdout] --> src/analyzers/missing_owner.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct MissingOwnerCheck; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OwnerCheckVisitor` is never constructed [INFO] [stdout] --> src/analyzers/missing_owner.rs:44:8 [INFO] [stdout] | [INFO] [stdout] 44 | struct OwnerCheckVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ReentrancyAnalyzer` is never constructed [INFO] [stdout] --> src/analyzers/reentrancy.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct ReentrancyAnalyzer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ReentrancyVisitor` is never constructed [INFO] [stdout] --> src/analyzers/reentrancy.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | struct ReentrancyVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_cpi_calls` is never used [INFO] [stdout] --> src/analyzers/reentrancy.rs:47:4 [INFO] [stdout] | [INFO] [stdout] 47 | fn contains_cpi_calls(block: &syn::Block) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_reentry_protection` is never used [INFO] [stdout] --> src/analyzers/reentrancy.rs:71:4 [INFO] [stdout] | [INFO] [stdout] 71 | fn has_reentry_protection(attrs: &[Attribute]) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `UnauthorizedAccessAnalyzer` is never constructed [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct UnauthorizedAccessAnalyzer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AuthorizationVisitor` is never constructed [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:9:8 [INFO] [stdout] | [INFO] [stdout] 9 | struct AuthorizationVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_authority_check` is never used [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:172:4 [INFO] [stdout] | [INFO] [stdout] 172 | fn has_authority_check(block: &syn::Block) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_signer_type` is never used [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:232:4 [INFO] [stdout] | [INFO] [stdout] 232 | fn is_signer_type(ty: &Type) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_struct_name_from_context` is never used [INFO] [stdout] --> src/analyzers/unauthorized_access.rs:253:4 [INFO] [stdout] | [INFO] [stdout] 253 | fn extract_struct_name_from_context(type_str: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `IntegerOverflowAnalyzer` is never constructed [INFO] [stdout] --> src/analyzers/integer_overflow.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct IntegerOverflowAnalyzer; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `OverflowVisitor` is never constructed [INFO] [stdout] --> src/analyzers/integer_overflow.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | struct OverflowVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_arithmetic_op` is never used [INFO] [stdout] --> src/analyzers/integer_overflow.rs:37:4 [INFO] [stdout] | [INFO] [stdout] 37 | fn is_arithmetic_op(op: &BinOp) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_checked_arithmetic` is never used [INFO] [stdout] --> src/analyzers/integer_overflow.rs:46:4 [INFO] [stdout] | [INFO] [stdout] 46 | fn is_checked_arithmetic(expr: &syn::ExprBinary) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `expr_to_string` is never used [INFO] [stdout] --> src/analyzers/integer_overflow.rs:58:4 [INFO] [stdout] | [INFO] [stdout] 58 | fn expr_to_string(expr: &syn::ExprBinary) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TypeCosplay` is never constructed [INFO] [stdout] --> src/analyzers/type_cosplay.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct TypeCosplay; [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TypeCosplayVisitor` is never constructed [INFO] [stdout] --> src/analyzers/type_cosplay.rs:43:8 [INFO] [stdout] | [INFO] [stdout] 43 | struct TypeCosplayVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_vulnerabilities` is never used [INFO] [stdout] --> src/analyzers/type_cosplay.rs:53:8 [INFO] [stdout] | [INFO] [stdout] 52 | impl<'a> TypeCosplayVisitor<'a> { [INFO] [stdout] | ------------------------------- method in this implementation [INFO] [stdout] 53 | fn analyze_vulnerabilities(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `check_account_data_usage` is never used [INFO] [stdout] --> src/analyzers/type_cosplay.rs:300:8 [INFO] [stdout] | [INFO] [stdout] 299 | impl<'a> TypeCosplayVisitor<'a> { [INFO] [stdout] | ------------------------------- method in this implementation [INFO] [stdout] 300 | fn check_account_data_usage(&mut self, expr: &syn::Expr, span: proc_macro2::Span) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PdaSharing` is never constructed [INFO] [stdout] --> src/analyzers/pda_sharing.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct PdaSharing; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `PdaSharingVisitor` is never constructed [INFO] [stdout] --> src/analyzers/pda_sharing.rs:36:8 [INFO] [stdout] | [INFO] [stdout] 36 | struct PdaSharingVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `analyze_seed_array` is never used [INFO] [stdout] --> src/analyzers/pda_sharing.rs:112:8 [INFO] [stdout] | [INFO] [stdout] 111 | impl<'a> PdaSharingVisitor<'a> { [INFO] [stdout] | ------------------------------ method in this implementation [INFO] [stdout] 112 | fn analyze_seed_array(&mut self, array: &ExprArray) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `InvalidSysvarAccounts` is never constructed [INFO] [stdout] --> src/analyzers/invalid_sysvar_accounts.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct InvalidSysvarAccounts; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `SysvarAccountsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/invalid_sysvar_accounts.rs:37:8 [INFO] [stdout] | [INFO] [stdout] 37 | struct SysvarAccountsVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ClosingAccounts` is never constructed [INFO] [stdout] --> src/analyzers/closing_accounts.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct ClosingAccounts; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ClosingAccountsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/closing_accounts.rs:93:8 [INFO] [stdout] | [INFO] [stdout] 93 | struct ClosingAccountsVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MissingBumpSeedCanonicalization` is never constructed [INFO] [stdout] --> src/analyzers/bump_seed_canonicalization.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct MissingBumpSeedCanonicalization; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `BumpSeedVisitor` is never constructed [INFO] [stdout] --> src/analyzers/bump_seed_canonicalization.rs:37:8 [INFO] [stdout] | [INFO] [stdout] 37 | struct BumpSeedVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DuplicateMutableAccounts` is never constructed [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct DuplicateMutableAccounts; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountStructCollector` is never constructed [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:63:8 [INFO] [stdout] | [INFO] [stdout] 63 | struct AccountStructCollector<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DuplicateMutableAccountsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:84:8 [INFO] [stdout] | [INFO] [stdout] 84 | struct DuplicateMutableAccountsVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `find_context_struct_for_expr` is never used [INFO] [stdout] --> src/analyzers/duplicate_mutable_accounts.rs:288:8 [INFO] [stdout] | [INFO] [stdout] 286 | impl DuplicateMutableAccountsVisitor { [INFO] [stdout] | ------------------------------------ method in this implementation [INFO] [stdout] 287 | // Helper method to find the context struct for an expression [INFO] [stdout] 288 | fn find_context_struct_for_expr(&self, _expr: &ExprBinary) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ArbitraryCpi` is never constructed [INFO] [stdout] --> src/analyzers/arbitrary_cpi.rs:7:12 [INFO] [stdout] | [INFO] [stdout] 7 | pub struct ArbitraryCpi; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ArbitraryCpiVisitor` is never constructed [INFO] [stdout] --> src/analyzers/arbitrary_cpi.rs:39:8 [INFO] [stdout] | [INFO] [stdout] 39 | struct ArbitraryCpiVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountInitialization` is never constructed [INFO] [stdout] --> src/analyzers/account_initialization.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct AccountInitialization; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_recommended_implementation` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:51:4 [INFO] [stdout] | [INFO] [stdout] 51 | fn is_recommended_implementation(path: &Path) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `InitStructsVisitor` is never constructed [INFO] [stdout] --> src/analyzers/account_initialization.rs:56:8 [INFO] [stdout] | [INFO] [stdout] 56 | struct InitStructsVisitor { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountInitializationVisitor` is never constructed [INFO] [stdout] --> src/analyzers/account_initialization.rs:95:8 [INFO] [stdout] | [INFO] [stdout] 95 | struct AccountInitializationVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_context_struct_name` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:264:4 [INFO] [stdout] | [INFO] [stdout] 264 | fn extract_context_struct_name(param_type: &str) -> Option { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `check_for_anchor_init_attributes` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:275:4 [INFO] [stdout] | [INFO] [stdout] 275 | fn check_for_anchor_init_attributes(func: &ItemFn, has_init: &mut bool) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_initialization_function` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:295:4 [INFO] [stdout] | [INFO] [stdout] 295 | fn is_initialization_function(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_initialization_pattern` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:309:4 [INFO] [stdout] | [INFO] [stdout] 309 | fn contains_initialization_pattern(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_deserialization_method` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:322:4 [INFO] [stdout] | [INFO] [stdout] 322 | fn is_deserialization_method(method_name: &str) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_reinitialization_check` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:331:4 [INFO] [stdout] | [INFO] [stdout] 331 | fn contains_reinitialization_check(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `has_anchor_account_attribute` is never used [INFO] [stdout] --> src/analyzers/account_initialization.rs:349:4 [INFO] [stdout] | [INFO] [stdout] 349 | fn has_anchor_account_attribute(func: &ItemFn) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountDataMatching` is never constructed [INFO] [stdout] --> src/analyzers/account_data_matching.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 8 | pub struct AccountDataMatching; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AccountDataMatchingVisitor` is never constructed [INFO] [stdout] --> src/analyzers/account_data_matching.rs:37:8 [INFO] [stdout] | [INFO] [stdout] 37 | struct AccountDataMatchingVisitor<'a> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `path_to_string` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:154:4 [INFO] [stdout] | [INFO] [stdout] 154 | fn path_to_string(path: &syn::Path) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `is_owner_check` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:162:4 [INFO] [stdout] | [INFO] [stdout] 162 | fn is_owner_check(left: &Expr, right: &Expr) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_authority_key` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:177:4 [INFO] [stdout] | [INFO] [stdout] 177 | fn contains_authority_key(expr: &Expr) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `contains_token_owner` is never used [INFO] [stdout] --> src/analyzers/account_data_matching.rs:198:4 [INFO] [stdout] | [INFO] [stdout] 198 | fn contains_token_owner(expr: &Expr) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `asts` and `root_path` are never read [INFO] [stdout] --> src/models/mod.rs:14:9 [INFO] [stdout] | [INFO] [stdout] 13 | pub struct Program { [INFO] [stdout] | ------- fields in this struct [INFO] [stdout] 14 | pub asts: HashMap, [INFO] [stdout] | ^^^^ [INFO] [stdout] 15 | pub root_path: std::path::PathBuf, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Program` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `from_file` is never used [INFO] [stdout] --> src/models/mod.rs:104:12 [INFO] [stdout] | [INFO] [stdout] 18 | impl Program { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 104 | pub fn from_file(file_path: PathBuf) -> Result { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MarkdownDocument` is never constructed [INFO] [stdout] --> src/models/markdown.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct MarkdownDocument { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MarkdownSection` is never constructed [INFO] [stdout] --> src/models/markdown.rs:12:12 [INFO] [stdout] | [INFO] [stdout] 12 | pub struct MarkdownSection { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `MarkdownTable` is never constructed [INFO] [stdout] --> src/models/markdown.rs:20:12 [INFO] [stdout] | [INFO] [stdout] 20 | pub struct MarkdownTable { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_section`, `to_string`, and `save_to_file` are never used [INFO] [stdout] --> src/models/markdown.rs:27:12 [INFO] [stdout] | [INFO] [stdout] 25 | impl MarkdownDocument { [INFO] [stdout] | --------------------- associated items in this implementation [INFO] [stdout] 26 | /// Create a new markdown document with a title [INFO] [stdout] 27 | pub fn new(title: &str) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 35 | pub fn add_section(&mut self, section: MarkdownSection) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 40 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 52 | pub fn save_to_file(&self, path: &Path) -> Result<()> { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_content`, `add_code_block`, `add_subsection`, and `to_string` are never used [INFO] [stdout] --> src/models/markdown.rs:60:12 [INFO] [stdout] | [INFO] [stdout] 58 | impl MarkdownSection { [INFO] [stdout] | -------------------- associated items in this implementation [INFO] [stdout] 59 | /// Create a new markdown section with a heading [INFO] [stdout] 60 | pub fn new(heading: &str, level: usize) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 70 | pub fn add_content(&mut self, content: &str) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 78 | pub fn add_code_block(&mut self, code: &str, language: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 84 | pub fn add_subsection(&mut self, subsection: MarkdownSection) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 89 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_row`, and `to_string` are never used [INFO] [stdout] --> src/models/markdown.rs:109:12 [INFO] [stdout] | [INFO] [stdout] 107 | impl MarkdownTable { [INFO] [stdout] | ------------------ associated items in this implementation [INFO] [stdout] 108 | /// Create a new markdown table with headers [INFO] [stdout] 109 | pub fn new(headers: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 117 | pub fn add_row(&mut self, row: Vec) { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 125 | pub fn to_string(&self) -> String { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_analysis_report` is never used [INFO] [stdout] --> src/models/markdown.rs:160:8 [INFO] [stdout] | [INFO] [stdout] 160 | pub fn create_analysis_report( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Finding` is never constructed [INFO] [stdout] --> src/models/markdown.rs:260:12 [INFO] [stdout] | [INFO] [stdout] 260 | pub struct Finding { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/models/markdown.rs:270:12 [INFO] [stdout] | [INFO] [stdout] 269 | impl Finding { [INFO] [stdout] | ------------ associated function in this implementation [INFO] [stdout] 270 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 1.03s [INFO] running `Command { std: "docker" "inspect" "e1f4f39cd357c685cca4a4cc02375d8e18e20a49fb5a3df7a6664870704e4867", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e1f4f39cd357c685cca4a4cc02375d8e18e20a49fb5a3df7a6664870704e4867", kill_on_drop: false }` [INFO] [stdout] e1f4f39cd357c685cca4a4cc02375d8e18e20a49fb5a3df7a6664870704e4867 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+cdb45c87e2cd43495379f7e867e3cc15dcee9f93" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 922207fcada0bf6ce62cf4c9bc51be11c9f3a3cb3d3a65037c5d221d009a0e60 [INFO] running `Command { std: "docker" "start" "-a" "922207fcada0bf6ce62cf4c9bc51be11c9f3a3cb3d3a65037c5d221d009a0e60", kill_on_drop: false }` [INFO] [stderr] warning: unused import: `std::collections::HashMap` [INFO] [stderr] --> src/main.rs:8:5 [INFO] [stderr] | [INFO] [stderr] 8 | use std::collections::HashMap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: variants `High`, `Medium`, and `Low` are never constructed [INFO] [stderr] --> src/analyzers/mod.rs:59:5 [INFO] [stderr] | [INFO] [stderr] 58 | pub enum Certainty { [INFO] [stderr] | --------- variants in this enum [INFO] [stderr] 59 | High, [INFO] [stderr] | ^^^^ [INFO] [stderr] 60 | Medium, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] 61 | Low, [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: `Certainty` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: struct `MissingOwnerCheck` is never constructed [INFO] [stderr] --> src/analyzers/missing_owner.rs:8:12 [INFO] [stderr] | [INFO] [stderr] 8 | pub struct MissingOwnerCheck; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `OwnerCheckVisitor` is never constructed [INFO] [stderr] --> src/analyzers/missing_owner.rs:44:8 [INFO] [stderr] | [INFO] [stderr] 44 | struct OwnerCheckVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ReentrancyAnalyzer` is never constructed [INFO] [stderr] --> src/analyzers/reentrancy.rs:6:12 [INFO] [stderr] | [INFO] [stderr] 6 | pub struct ReentrancyAnalyzer; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ReentrancyVisitor` is never constructed [INFO] [stderr] --> src/analyzers/reentrancy.rs:8:8 [INFO] [stderr] | [INFO] [stderr] 8 | struct ReentrancyVisitor { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `contains_cpi_calls` is never used [INFO] [stderr] --> src/analyzers/reentrancy.rs:47:4 [INFO] [stderr] | [INFO] [stderr] 47 | fn contains_cpi_calls(block: &syn::Block) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `has_reentry_protection` is never used [INFO] [stderr] --> src/analyzers/reentrancy.rs:71:4 [INFO] [stderr] | [INFO] [stderr] 71 | fn has_reentry_protection(attrs: &[Attribute]) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `UnauthorizedAccessAnalyzer` is never constructed [INFO] [stderr] --> src/analyzers/unauthorized_access.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | pub struct UnauthorizedAccessAnalyzer; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AuthorizationVisitor` is never constructed [INFO] [stderr] --> src/analyzers/unauthorized_access.rs:9:8 [INFO] [stderr] | [INFO] [stderr] 9 | struct AuthorizationVisitor { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `has_authority_check` is never used [INFO] [stderr] --> src/analyzers/unauthorized_access.rs:172:4 [INFO] [stderr] | [INFO] [stderr] 172 | fn has_authority_check(block: &syn::Block) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_signer_type` is never used [INFO] [stderr] --> src/analyzers/unauthorized_access.rs:232:4 [INFO] [stderr] | [INFO] [stderr] 232 | fn is_signer_type(ty: &Type) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `extract_struct_name_from_context` is never used [INFO] [stderr] --> src/analyzers/unauthorized_access.rs:253:4 [INFO] [stderr] | [INFO] [stderr] 253 | fn extract_struct_name_from_context(type_str: &str) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `IntegerOverflowAnalyzer` is never constructed [INFO] [stderr] --> src/analyzers/integer_overflow.rs:6:12 [INFO] [stderr] | [INFO] [stderr] 6 | pub struct IntegerOverflowAnalyzer; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `OverflowVisitor` is never constructed [INFO] [stderr] --> src/analyzers/integer_overflow.rs:8:8 [INFO] [stderr] | [INFO] [stderr] 8 | struct OverflowVisitor { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_arithmetic_op` is never used [INFO] [stderr] --> src/analyzers/integer_overflow.rs:37:4 [INFO] [stderr] | [INFO] [stderr] 37 | fn is_arithmetic_op(op: &BinOp) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_checked_arithmetic` is never used [INFO] [stderr] --> src/analyzers/integer_overflow.rs:46:4 [INFO] [stderr] | [INFO] [stderr] 46 | fn is_checked_arithmetic(expr: &syn::ExprBinary) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `expr_to_string` is never used [INFO] [stderr] --> src/analyzers/integer_overflow.rs:58:4 [INFO] [stderr] | [INFO] [stderr] 58 | fn expr_to_string(expr: &syn::ExprBinary) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `TypeCosplay` is never constructed [INFO] [stderr] --> src/analyzers/type_cosplay.rs:8:12 [INFO] [stderr] | [INFO] [stderr] 8 | pub struct TypeCosplay; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `TypeCosplayVisitor` is never constructed [INFO] [stderr] --> src/analyzers/type_cosplay.rs:43:8 [INFO] [stderr] | [INFO] [stderr] 43 | struct TypeCosplayVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `analyze_vulnerabilities` is never used [INFO] [stderr] --> src/analyzers/type_cosplay.rs:53:8 [INFO] [stderr] | [INFO] [stderr] 52 | impl<'a> TypeCosplayVisitor<'a> { [INFO] [stderr] | ------------------------------- method in this implementation [INFO] [stderr] 53 | fn analyze_vulnerabilities(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `check_account_data_usage` is never used [INFO] [stderr] --> src/analyzers/type_cosplay.rs:300:8 [INFO] [stderr] | [INFO] [stderr] 299 | impl<'a> TypeCosplayVisitor<'a> { [INFO] [stderr] | ------------------------------- method in this implementation [INFO] [stderr] 300 | fn check_account_data_usage(&mut self, expr: &syn::Expr, span: proc_macro2::Span) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `PdaSharing` is never constructed [INFO] [stderr] --> src/analyzers/pda_sharing.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | pub struct PdaSharing; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `PdaSharingVisitor` is never constructed [INFO] [stderr] --> src/analyzers/pda_sharing.rs:36:8 [INFO] [stderr] | [INFO] [stderr] 36 | struct PdaSharingVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `analyze_seed_array` is never used [INFO] [stderr] --> src/analyzers/pda_sharing.rs:112:8 [INFO] [stderr] | [INFO] [stderr] 111 | impl<'a> PdaSharingVisitor<'a> { [INFO] [stderr] | ------------------------------ method in this implementation [INFO] [stderr] 112 | fn analyze_seed_array(&mut self, array: &ExprArray) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `InvalidSysvarAccounts` is never constructed [INFO] [stderr] --> src/analyzers/invalid_sysvar_accounts.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | pub struct InvalidSysvarAccounts; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `SysvarAccountsVisitor` is never constructed [INFO] [stderr] --> src/analyzers/invalid_sysvar_accounts.rs:37:8 [INFO] [stderr] | [INFO] [stderr] 37 | struct SysvarAccountsVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ClosingAccounts` is never constructed [INFO] [stderr] --> src/analyzers/closing_accounts.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | pub struct ClosingAccounts; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ClosingAccountsVisitor` is never constructed [INFO] [stderr] --> src/analyzers/closing_accounts.rs:93:8 [INFO] [stderr] | [INFO] [stderr] 93 | struct ClosingAccountsVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `MissingBumpSeedCanonicalization` is never constructed [INFO] [stderr] --> src/analyzers/bump_seed_canonicalization.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | pub struct MissingBumpSeedCanonicalization; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `BumpSeedVisitor` is never constructed [INFO] [stderr] --> src/analyzers/bump_seed_canonicalization.rs:37:8 [INFO] [stderr] | [INFO] [stderr] 37 | struct BumpSeedVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `DuplicateMutableAccounts` is never constructed [INFO] [stderr] --> src/analyzers/duplicate_mutable_accounts.rs:8:12 [INFO] [stderr] | [INFO] [stderr] 8 | pub struct DuplicateMutableAccounts; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AccountStructCollector` is never constructed [INFO] [stderr] --> src/analyzers/duplicate_mutable_accounts.rs:63:8 [INFO] [stderr] | [INFO] [stderr] 63 | struct AccountStructCollector<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `DuplicateMutableAccountsVisitor` is never constructed [INFO] [stderr] --> src/analyzers/duplicate_mutable_accounts.rs:84:8 [INFO] [stderr] | [INFO] [stderr] 84 | struct DuplicateMutableAccountsVisitor { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method `find_context_struct_for_expr` is never used [INFO] [stderr] --> src/analyzers/duplicate_mutable_accounts.rs:288:8 [INFO] [stderr] | [INFO] [stderr] 286 | impl DuplicateMutableAccountsVisitor { [INFO] [stderr] | ------------------------------------ method in this implementation [INFO] [stderr] 287 | // Helper method to find the context struct for an expression [INFO] [stderr] 288 | fn find_context_struct_for_expr(&self, _expr: &ExprBinary) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ArbitraryCpi` is never constructed [INFO] [stderr] --> src/analyzers/arbitrary_cpi.rs:7:12 [INFO] [stderr] | [INFO] [stderr] 7 | pub struct ArbitraryCpi; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ArbitraryCpiVisitor` is never constructed [INFO] [stderr] --> src/analyzers/arbitrary_cpi.rs:39:8 [INFO] [stderr] | [INFO] [stderr] 39 | struct ArbitraryCpiVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AccountInitialization` is never constructed [INFO] [stderr] --> src/analyzers/account_initialization.rs:8:12 [INFO] [stderr] | [INFO] [stderr] 8 | pub struct AccountInitialization; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_recommended_implementation` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:51:4 [INFO] [stderr] | [INFO] [stderr] 51 | fn is_recommended_implementation(path: &Path) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `InitStructsVisitor` is never constructed [INFO] [stderr] --> src/analyzers/account_initialization.rs:56:8 [INFO] [stderr] | [INFO] [stderr] 56 | struct InitStructsVisitor { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AccountInitializationVisitor` is never constructed [INFO] [stderr] --> src/analyzers/account_initialization.rs:95:8 [INFO] [stderr] | [INFO] [stderr] 95 | struct AccountInitializationVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `extract_context_struct_name` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:264:4 [INFO] [stderr] | [INFO] [stderr] 264 | fn extract_context_struct_name(param_type: &str) -> Option { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `check_for_anchor_init_attributes` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:275:4 [INFO] [stderr] | [INFO] [stderr] 275 | fn check_for_anchor_init_attributes(func: &ItemFn, has_init: &mut bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_initialization_function` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:295:4 [INFO] [stderr] | [INFO] [stderr] 295 | fn is_initialization_function(func: &ItemFn) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `contains_initialization_pattern` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:309:4 [INFO] [stderr] | [INFO] [stderr] 309 | fn contains_initialization_pattern(func: &ItemFn) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_deserialization_method` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:322:4 [INFO] [stderr] | [INFO] [stderr] 322 | fn is_deserialization_method(method_name: &str) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `contains_reinitialization_check` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:331:4 [INFO] [stderr] | [INFO] [stderr] 331 | fn contains_reinitialization_check(func: &ItemFn) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `has_anchor_account_attribute` is never used [INFO] [stderr] --> src/analyzers/account_initialization.rs:349:4 [INFO] [stderr] | [INFO] [stderr] 349 | fn has_anchor_account_attribute(func: &ItemFn) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AccountDataMatching` is never constructed [INFO] [stderr] --> src/analyzers/account_data_matching.rs:8:12 [INFO] [stderr] | [INFO] [stderr] 8 | pub struct AccountDataMatching; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `AccountDataMatchingVisitor` is never constructed [INFO] [stderr] --> src/analyzers/account_data_matching.rs:37:8 [INFO] [stderr] | [INFO] [stderr] 37 | struct AccountDataMatchingVisitor<'a> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `path_to_string` is never used [INFO] [stderr] --> src/analyzers/account_data_matching.rs:154:4 [INFO] [stderr] | [INFO] [stderr] 154 | fn path_to_string(path: &syn::Path) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `is_owner_check` is never used [INFO] [stderr] --> src/analyzers/account_data_matching.rs:162:4 [INFO] [stderr] | [INFO] [stderr] 162 | fn is_owner_check(left: &Expr, right: &Expr) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `contains_authority_key` is never used [INFO] [stderr] --> src/analyzers/account_data_matching.rs:177:4 [INFO] [stderr] | [INFO] [stderr] 177 | fn contains_authority_key(expr: &Expr) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `contains_token_owner` is never used [INFO] [stderr] --> src/analyzers/account_data_matching.rs:198:4 [INFO] [stderr] | [INFO] [stderr] 198 | fn contains_token_owner(expr: &Expr) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: fields `asts` and `root_path` are never read [INFO] [stderr] --> src/models/mod.rs:14:9 [INFO] [stderr] | [INFO] [stderr] 13 | pub struct Program { [INFO] [stderr] | ------- fields in this struct [INFO] [stderr] 14 | pub asts: HashMap, [INFO] [stderr] | ^^^^ [INFO] [stderr] 15 | pub root_path: std::path::PathBuf, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `Program` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stderr] [INFO] [stderr] warning: associated function `from_file` is never used [INFO] [stderr] --> src/models/mod.rs:104:12 [INFO] [stderr] | [INFO] [stderr] 18 | impl Program { [INFO] [stderr] | ------------ associated function in this implementation [INFO] [stderr] ... [INFO] [stderr] 104 | pub fn from_file(file_path: PathBuf) -> Result { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `MarkdownDocument` is never constructed [INFO] [stderr] --> src/models/markdown.rs:6:12 [INFO] [stderr] | [INFO] [stderr] 6 | pub struct MarkdownDocument { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `MarkdownSection` is never constructed [INFO] [stderr] --> src/models/markdown.rs:12:12 [INFO] [stderr] | [INFO] [stderr] 12 | pub struct MarkdownSection { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `MarkdownTable` is never constructed [INFO] [stderr] --> src/models/markdown.rs:20:12 [INFO] [stderr] | [INFO] [stderr] 20 | pub struct MarkdownTable { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `add_section`, `to_string`, and `save_to_file` are never used [INFO] [stderr] --> src/models/markdown.rs:27:12 [INFO] [stderr] | [INFO] [stderr] 25 | impl MarkdownDocument { [INFO] [stderr] | --------------------- associated items in this implementation [INFO] [stderr] 26 | /// Create a new markdown document with a title [INFO] [stderr] 27 | pub fn new(title: &str) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 35 | pub fn add_section(&mut self, section: MarkdownSection) { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 40 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 52 | pub fn save_to_file(&self, path: &Path) -> Result<()> { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `add_content`, `add_code_block`, `add_subsection`, and `to_string` are never used [INFO] [stderr] --> src/models/markdown.rs:60:12 [INFO] [stderr] | [INFO] [stderr] 58 | impl MarkdownSection { [INFO] [stderr] | -------------------- associated items in this implementation [INFO] [stderr] 59 | /// Create a new markdown section with a heading [INFO] [stderr] 60 | pub fn new(heading: &str, level: usize) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 70 | pub fn add_content(&mut self, content: &str) { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 78 | pub fn add_code_block(&mut self, code: &str, language: &str) { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 84 | pub fn add_subsection(&mut self, subsection: MarkdownSection) { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 89 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `add_row`, and `to_string` are never used [INFO] [stderr] --> src/models/markdown.rs:109:12 [INFO] [stderr] | [INFO] [stderr] 107 | impl MarkdownTable { [INFO] [stderr] | ------------------ associated items in this implementation [INFO] [stderr] 108 | /// Create a new markdown table with headers [INFO] [stderr] 109 | pub fn new(headers: Vec) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 117 | pub fn add_row(&mut self, row: Vec) { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 125 | pub fn to_string(&self) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `create_analysis_report` is never used [INFO] [stderr] --> src/models/markdown.rs:160:8 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn create_analysis_report( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `Finding` is never constructed [INFO] [stderr] --> src/models/markdown.rs:260:12 [INFO] [stderr] | [INFO] [stderr] 260 | pub struct Finding { [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `new` is never used [INFO] [stderr] --> src/models/markdown.rs:270:12 [INFO] [stderr] | [INFO] [stderr] 269 | impl Finding { [INFO] [stderr] | ------------ associated function in this implementation [INFO] [stderr] 270 | pub fn new( [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: `solana_fender` (bin "solana_fender" test) generated 65 warnings (run `cargo fix --bin "solana_fender" --tests` to apply 1 suggestion) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/solana_fender-8d09974c16a7a56f) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/solana_fender-ea4cda4f001bd658) [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stderr] Doc-tests solana_fender [INFO] [stdout] [INFO] [stdout] running 3 tests [INFO] [stdout] test src/lib.rs - analyze_program (line 48) ... ignored [INFO] [stdout] test src/lib.rs - analyze_program_by_name (line 140) ... ignored [INFO] [stdout] test src/lib.rs - findings_to_markdown (line 376) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.70s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "922207fcada0bf6ce62cf4c9bc51be11c9f3a3cb3d3a65037c5d221d009a0e60", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "922207fcada0bf6ce62cf4c9bc51be11c9f3a3cb3d3a65037c5d221d009a0e60", kill_on_drop: false }` [INFO] [stdout] 922207fcada0bf6ce62cf4c9bc51be11c9f3a3cb3d3a65037c5d221d009a0e60