[INFO] cloning repository https://github.com/vaultlint/vaultlint
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/vaultlint/vaultlint" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvaultlint%2Fvaultlint", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvaultlint%2Fvaultlint'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] fbc5a8e8eaa46b713a7feeaea54b2530652a8c9c
[INFO] testing vaultlint/vaultlint against 1.99.0-beta.8+cargoflags=--release for beta-release-1.100-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fvaultlint%2Fvaultlint" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/vaultlint/vaultlint
[INFO] finished tweaking git repo https://github.com/vaultlint/vaultlint
[INFO] tweaked toml for git repo https://github.com/vaultlint/vaultlint written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/vaultlint/vaultlint on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/vaultlint/vaultlint 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" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234
[INFO] running `Command { std: "docker" "start" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling bytes v1.12.1
[INFO] [stderr]    Compiling rustls v0.23.42
[INFO] [stderr]    Compiling cc v1.4.0
[INFO] [stderr]    Compiling log v0.4.33
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling owo-colors v4.3.0
[INFO] [stderr]    Compiling clap_builder v4.6.2
[INFO] [stderr]    Compiling utf8-zero v0.8.1
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling webpki-roots v1.0.9
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling ureq-proto v0.6.0
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling clap v4.6.4
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling ureq v3.3.0
[INFO] [stderr]    Compiling vaultlint v0.2.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 2m 08s
[INFO] running `Command { std: "docker" "inspect" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling vaultlint v0.2.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 59.95s
[INFO] running `Command { std: "docker" "inspect" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.07s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/vaultlint-7b6f4be7c8fd76f5)
[INFO] [stdout] 
[INFO] [stdout] running 244 tests
[INFO] [stdout] test anchor::tests::records_the_line_of_each_field ... ok
[INFO] [stdout] test anchor::tests::finds_accounts_structs_nested_in_modules ... ok
[INFO] [stdout] test anchor::tests::instruction_args_empty_when_no_instruction_attr ... ok
[INFO] [stdout] test anchor::tests::parses_instruction_arg_names ... ok
[INFO] [stdout] test anchor::tests::parses_legacy_string_constraint_as_custom ... ok
[INFO] [stdout] test anchor::tests::recognises_field_types_including_boxed_accounts ... ok
[INFO] [stdout] test onchain::tests::a_live_authority_is_read_with_its_deploy_slot ... ok
[INFO] [stdout] test depgraph::tests::both_ways_of_naming_a_local_crate_are_followed_transitively ... ok
[INFO] [stdout] test onchain::tests::a_finding_carries_the_live_programs_its_code_is_part_of ... ok
[INFO] [stdout] test onchain::tests::a_missing_account_is_absent ... ok
[INFO] [stdout] test anchor::attr::tests::keeps_the_value_of_a_stored_bump_and_a_namespaced_key ... ok
[INFO] [stdout] test depgraph::tests::nothing_that_may_not_ship_is_reached ... ok
[INFO] [stdout] test anchor::attr::tests::splits_on_the_first_equals_only ... ok
[INFO] [stdout] test onchain::tests::a_revoked_authority_is_frozen ... ok
[INFO] [stdout] test depgraph::tests::a_dependency_cycle_terminates ... ok
[INFO] [stdout] test parse::tests::depth_ignores_comments_and_literals ... ok
[INFO] [stdout] test onchain::tests::base64_decodes_padded_and_unpadded_input ... ok
[INFO] [stdout] test parse::tests::ordinary_source_is_nowhere_near_the_limit ... ok
[INFO] [stdout] test parse::tests::parses_valid_rust_and_keeps_source ... ok
[INFO] [stdout] test onchain::tests::a_truncated_program_data_account_is_unavailable ... ok
[INFO] [stdout] test onchain::tests::the_loader_decides_what_the_account_is ... ok
[INFO] [stdout] test programid::tests::reaches_inside_an_inline_module ... ok
[INFO] [stdout] test parse::tests::refuses_a_file_nested_past_the_limit ... ok
[INFO] [stdout] test anchor::tests::parses_constraints_and_distinguishes_stored_bump ... ok
[INFO] [stdout] test anchor::tests::collects_only_accounts_structs ... ok
[INFO] [stdout] test programid::tests::rejects_base58_that_decodes_to_the_wrong_width ... ok
[INFO] [stdout] test anchor::attr::tests::splits_constraints_including_the_mut_keyword ... ok
[INFO] [stdout] test project::tests::a_member_profile_is_ignored_the_workspace_root_decides ... ok
[INFO] [stdout] test parse::tests::reports_error_for_invalid_rust ... ok
[INFO] [stdout] test onchain::tests::an_unanswered_lookup_never_reads_as_live ... ok
[INFO] [stdout] test onchain::tests::an_upgradeable_program_yields_its_program_data_address ... ok
[INFO] [stdout] test programid::tests::a_leading_one_decodes_to_a_zero_byte ... ok
[INFO] [stdout] test report::human::tests::the_live_line_names_an_address_and_appears_only_when_there_is_one ... ok
[INFO] [stdout] test project::tests::a_standalone_package_is_its_own_workspace_root ... ok
[INFO] [stdout] test programid::tests::collects_a_top_level_declare_id_with_its_location ... ok
[INFO] [stdout] test report::human::tests::a_finding_carries_its_documentation_url ... ok
[INFO] [stdout] test programid::tests::skips_a_non_literal_argument_and_a_literal_that_is_not_an_address ... ok
[INFO] [stdout] test report::json::tests::each_state_carries_only_its_own_fields ... ok
[INFO] [stdout] test report::human::tests::an_offline_report_says_nothing_about_a_cluster ... ok
[INFO] [stdout] test report::sarif::tests::percent_encode_path_encodes_spaces_and_non_ascii ... ok
[INFO] [stdout] test report::human::tests::every_deployment_state_reads_differently ... ok
[INFO] [stdout] test report::tests::fail_on_low_triggers_on_a_low_severity_finding ... ok
[INFO] [stdout] test report::human::tests::the_url_is_unstyled_when_colour_is_off ... ok
[INFO] [stdout] test report::tests::human_header_pluralises_file_noun ... ok
[INFO] [stdout] test report::tests::human_output_is_reassuring_when_clean ... ok
[INFO] [stdout] test report::tests::human_output_shows_severity_location_and_summary ... ok
[INFO] [stdout] test report::tests::json_output_includes_skipped_files ... ok
[INFO] [stdout] test project::tests::an_excluded_package_is_recognised_through_dotdot_spelling ... ok
[INFO] [stdout] test project::tests::an_excluded_package_is_its_own_root ... ok
[INFO] [stdout] test project::tests::detect_reads_anchor_version ... ok
[INFO] [stdout] test report::tests::sarif_vl003_descriptor_is_stable_regardless_of_finding_order ... ok
[INFO] [stdout] test project::tests::two_paths_to_same_root_yield_same_manifest ... ok
[INFO] [stdout] test report::tests::sarif_uri_inside_scan_root_is_relative_with_base_id ... ok
[INFO] [stdout] test programid::tests::encoding_round_trips_a_thirty_two_byte_address ... ok
[INFO] [stdout] test rules::access_control::tests::a_qualified_call_does_not_resolve_to_another_types_method ... ok
[INFO] [stdout] test report::tests::json_output_is_an_object_with_findings_and_skipped_keys ... ok
[INFO] [stdout] test rules::access_control::tests::an_unrelated_attribute_is_ignored ... ok
[INFO] [stdout] test programid::tests::keeps_source_order ... ok
[INFO] [stdout] test report::tests::sarif_declares_every_rule_that_produced_a_finding_once ... ok
[INFO] [stdout] test report::tests::sarif_skipped_files_appear_in_invocation_notifications ... ok
[INFO] [stdout] test programid::tests::matches_a_path_qualified_macro ... ok
[INFO] [stdout] test report::tests::sarif_uri_outside_scan_root_is_absolute_with_no_base_id ... ok
[INFO] [stdout] test rules::access_control::tests::an_unresolvable_name_yields_no_blocks ... ok
[INFO] [stdout] test report::tests::sarif_output_carries_tool_rules_and_locations ... ok
[INFO] [stdout] test report::tests::exit_code_respects_the_threshold ... ok
[INFO] [stdout] test rules::arithmetic::tests::project_finding_points_at_the_profile_release_line ... ok
[INFO] [stdout] test rules::access_control::tests::resolves_a_free_function_by_name ... ok
[INFO] [stdout] test rules::cpi::tests::account_info_field_is_not_silenced_by_s2 ... ok
[INFO] [stdout] test rules::arithmetic::tests::accepts_checked_arithmetic ... ok
[INFO] [stdout] test rules::cpi::tests::accepts_invoke_guarded_by_require_keys_eq ... ok
[INFO] [stdout] test rules::access_control::tests::resolves_every_call_in_one_attribute ... ok
[INFO] [stdout] test rules::cpi::tests::accepts_invoke_guarded_by_a_program_id_comparison ... ok
[INFO] [stdout] test rules::cpi::tests::an_access_control_guard_silences_the_cpi_it_protects ... ok
[INFO] [stdout] test rules::cpi::tests::a_helper_without_the_attribute_does_not_silence ... ok
[INFO] [stdout] test rules::arithmetic::tests::flags_arithmetic_gated_on_a_cargo_feature_named_test ... ok
[INFO] [stdout] test rules::cpi::tests::cpi_inside_a_closure_is_found ... ok
[INFO] [stdout] test rules::cpi::tests::constant_program_id_is_silent ... ok
[INFO] [stdout] test rules::cpi::tests::cpi_inside_conditional_block_is_found ... ok
[INFO] [stdout] test rules::cpi::tests::invoke_of_externally_built_instruction_is_not_a_finding ... ok
[INFO] [stdout] test rules::cpi::tests::flags_inline_instruction_struct_literal_at_call_site ... ok
[INFO] [stdout] test rules::cpi::tests::flags_new_with_borsh_bound_to_local_and_invoked ... ok
[INFO] [stdout] test rules::cpi::tests::program_typed_account_field_silences_the_finding ... ok
[INFO] [stdout] test rules::cpi::tests::program_typed_account_through_let_hop_silences_the_finding ... ok
[INFO] [stdout] test rules::cpi::tests::s2b_boxed_program_typed_parameter_silences_the_finding ... ok
[INFO] [stdout] test rules::arithmetic::tests::flags_bare_subtraction_written_into_account_state ... ok
[INFO] [stdout] test rules::cpi::tests::ref_initialiser_is_recognised ... ok
[INFO] [stdout] test rules::cpi::tests::s2c_account_info_field_is_not_silenced ... ok
[INFO] [stdout] test rules::cpi::tests::s2_field_name_does_not_silence_an_unrelated_raw_parameter ... ok
[INFO] [stdout] test rules::cpi::tests::s2b_account_info_parameter_is_not_silenced ... ok
[INFO] [stdout] test rules::cpi::tests::s2c_accounts_struct_parameter_silences_the_finding ... ok
[INFO] [stdout] test rules::cpi::tests::s2c_field_name_does_not_silence_an_unrelated_raw_parameter ... ok
[INFO] [stdout] test rules::cpi::tests::sdk_builder_invocation_is_silent ... ok
[INFO] [stdout] test rules::cpi::tests::shadowed_binding_resolves_to_latest_value ... ok
[INFO] [stdout] test rules::cpi::tests::s2b_program_typed_parameter_silences_the_finding ... ok
[INFO] [stdout] test rules::cpi::tests::s5_must_not_silence_plain_context ... ok
[INFO] [stdout] test rules::cpi::tests::sequential_shadowing_flags_only_the_later_invoke ... ok
[INFO] [stdout] test rules::arithmetic::tests::flags_compound_assignment_into_account_state ... ok
[INFO] [stdout] test rules::arithmetic::tests::ignores_arithmetic_on_local_variables ... ok
[INFO] [stdout] test rules::arithmetic::tests::ignores_test_modules ... ok
[INFO] [stdout] test rules::cpi::tests::t2_follows_let_hop_for_program_id ... ok
[INFO] [stdout] test rules::arithmetic::tests::is_silent_when_the_project_enables_overflow_checks ... ok
[INFO] [stdout] test rules::cpi::tests::sibling_branches_flag_only_the_dangerous_arm ... ok
[INFO] [stdout] test rules::cpi::tests::t2_follows_let_hop_with_shorthand_field ... ok
[INFO] [stdout] test rules::cpi::tests::spl_token_builder_with_account_derived_program_id_fires ... ok
[INFO] [stdout] test rules::cpi::tests::try_operator_on_builder_result_is_unwrapped ... ok
[INFO] [stdout] test rules::cpi::tests::whole_word_match_with_empty_needle_returns_false ... ok
[INFO] [stdout] test rules::cpi::tests::spl_token_builder_with_constant_program_id_is_silent ... ok
[INFO] [stdout] test rules::cpi::tests::type_annotated_let_binding_is_resolved ... ok
[INFO] [stdout] test rules::cpi::tests::instruction_new_is_not_a_recognised_builder ... ok
[INFO] [stdout] test rules::init_authority::tests::a_binding_on_an_init_sibling_proves_nothing ... ok
[INFO] [stdout] test rules::cpi::tests::new_with_bytes_without_instruction_segment_is_silent ... ok
[INFO] [stdout] test rules::init_authority::tests::a_longer_receiver_is_not_the_account_we_are_tracking ... ok
[INFO] [stdout] test rules::init_authority::tests::a_multi_byte_left_neighbour_still_continues_an_identifier ... ok
[INFO] [stdout] test rules::cpi::tests::program_field_name_does_not_match_inside_longer_name ... ok
[INFO] [stdout] test rules::init_authority::tests::a_struct_literal_separator_is_not_a_path_separator ... ok
[INFO] [stdout] test rules::cpi::tests::s5_cpi_context_helper_is_silent ... ok
[INFO] [stdout] test rules::init_authority::tests::a_destructured_binding_is_still_a_read_of_the_field ... ok
[INFO] [stdout] test rules::init_authority::tests::a_struct_with_no_linked_body_never_fires ... ok
[INFO] [stdout] test rules::init_authority::tests::an_authority_absent_from_the_seeds_does_not_fire ... ok
[INFO] [stdout] test rules::init_authority::tests::a_field_access_in_the_seeds_does_not_satisfy_t4 ... ok
[INFO] [stdout] test rules::init_authority::tests::a_non_ascii_field_name_is_scanned_without_panicking ... ok
[INFO] [stdout] test rules::init_authority::tests::a_field_access_in_the_handler_does_not_satisfy_t5 ... ok
[INFO] [stdout] test rules::init_authority::tests::an_aliased_local_is_still_a_read_of_the_field ... ok
[INFO] [stdout] test rules::init_authority::tests::a_struct_literal_write_is_still_a_read_of_the_field ... ok
[INFO] [stdout] test rules::init_authority::tests::a_settled_sibling_binding_the_field_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::a_proven_signer_authority_in_the_struct_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::a_name_that_is_not_an_authority_marker_does_not_fire ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_on_a_destructured_binding_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::an_impl_method_is_a_use_site ... ok
[INFO] [stdout] test rules::init_authority::tests::a_namespaced_constraint_on_a_settled_sibling_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::a_constraint_call_mentioning_the_field_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::a_check_in_another_crate_does_not_silence_this_ones_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_in_the_handler_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::body_text_keeps_two_words_apart_but_glues_a_field_access ... ok
[INFO] [stdout] test rules::init_authority::tests::an_own_signer_constraint_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::finds_the_handler_in_another_file_of_the_same_crate ... ok
[INFO] [stdout] test rules::init_authority::tests::an_unbound_signer_does_not_stand_in_for_a_proven_authority ... ok
[INFO] [stdout] test rules::init_authority::tests::an_own_address_constraint_silences_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::a_bare_owner_read_does_not_silence_the_rule ... ok
[INFO] [stdout] test rules::owner::tests::a_bare_account_info_parameter_is_reported_at_medium ... ok
[INFO] [stdout] test rules::init_authority::tests::own_seeds_silence_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::a_pda_address_check_does_not_silence_a_different_account ... ok
[INFO] [stdout] test rules::init_authority::tests::flags_the_marginfi_authority_fixed_in_95a4c26 ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_beside_a_struct_literal_write_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::the_marginfi_fix_silences_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::a_comparison_without_a_derivation_does_not_silence ... ok
[INFO] [stdout] test rules::owner::tests::a_comparison_against_the_owner_still_silences ... ok
[INFO] [stdout] test rules::init_authority::tests::forwarding_the_account_into_a_cpi_without_reading_its_key_does_not_fire ... ok
[INFO] [stdout] test rules::owner::tests::a_pda_address_check_silences_the_read_it_proves ... ok
[INFO] [stdout] test rules::init_authority::tests::an_own_constraint_silences_the_finding ... ok
[INFO] [stdout] test rules::init_authority::tests::the_textbook_missing_signer_case_is_a_deliberate_documented_miss ... ok
[INFO] [stdout] test rules::cpi::tests::ignores_functions_without_any_cpi ... ok
[INFO] [stdout] test rules::cpi::tests::flags_instruction_struct_literal_with_account_derived_program_id ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_on_an_aliased_local_silences_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::a_read_of_an_account_the_function_holds_stays_high ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_one_call_away_silences_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::a_typed_account_parameter_does_not_downgrade ... ok
[INFO] [stdout] test rules::owner::tests::flags_a_read_through_an_intermediate_local ... ok
[INFO] [stdout] test rules::owner::tests::accepts_deserialisation_guarded_by_an_owner_check ... ok
[INFO] [stdout] test rules::owner::tests::an_unreferenced_helper_does_not_silence ... ok
[INFO] [stdout] test rules::owner::tests::an_anchor_address_constraint_silences_the_read_of_that_field ... ok
[INFO] [stdout] test rules::owner::tests::assert_with_eq_and_find_program_address_silences ... ok
[INFO] [stdout] test rules::owner::tests::flags_an_inline_mutable_borrow_read ... ok
[INFO] [stdout] test rules::owner::tests::an_anchor_seeds_constraint_silences_the_read_of_that_field ... ok
[INFO] [stdout] test rules::owner::tests::an_anchor_constraint_on_another_field_does_not_silence ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_one_call_away_from_an_aliased_local_silences_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::flags_an_inline_try_borrow_data_read ... ok
[INFO] [stdout] test rules::init_authority::tests::an_is_signer_check_on_a_different_parameter_does_not_silence_the_finding ... ok
[INFO] [stdout] test rules::owner::tests::flags_an_intermediate_local_inside_a_nested_block ... ok
[INFO] [stdout] test rules::owner::tests::flags_manual_deserialisation_without_an_owner_check ... ok
[INFO] [stdout] test rules::owner::tests::the_let_hop_ignores_locals_that_do_not_hold_account_data ... ok
[INFO] [stdout] test rules::owner::tests::ignores_deserialisation_that_is_not_reading_raw_account_data ... ok
[INFO] [stdout] test rules::owner::tests::msg_macro_naming_account_does_not_silence ... ok
[INFO] [stdout] test rules::pda::tests::accepts_bump_validated_against_stored_state ... ok
[INFO] [stdout] test rules::pda::tests::accepts_bare_bump_during_initialisation ... ok
[INFO] [stdout] test rules::pda::tests::accepts_a_bump_seed_read_from_account_data ... ok
[INFO] [stdout] test rules::owner::tests::a_read_inside_the_guard_is_not_attributed_to_the_handler ... ok
[INFO] [stdout] test rules::pda::tests::a_stored_value_in_an_earlier_seed_does_not_silence ... ok
[INFO] [stdout] test rules::owner::tests::an_access_control_guard_silences_the_read_it_protects ... ok
[INFO] [stdout] test rules::pda::tests::accepts_bare_bump_on_reused_pda ... ok
[INFO] [stdout] test rules::pda::tests::accepts_find_program_address ... ok
[INFO] [stdout] test rules::pda::tests::accepts_bump_equal_to_non_instruction_ident ... ok
[INFO] [stdout] test rules::pda::tests::flags_a_bare_identifier_bump_seed ... ok
[INFO] [stdout] test rules::pda::tests::flags_bump_equal_to_instruction_argument ... ok
[INFO] [stdout] test rules::owner::tests::ignores_typed_anchor_accounts ... ok
[INFO] [stdout] test rules::pda::tests::flags_raw_create_program_address ... ok
[INFO] [stdout] test rules::owner::tests::an_owner_helper_call_still_silences ... ok
[INFO] [stdout] test scope::tests::cfg_test_recogniser_rejects_a_flag_merely_containing_test ... ok
[INFO] [stdout] test rules::owner::tests::s3_does_not_silence_when_only_a_different_account_is_checked ... ok
[INFO] [stdout] test scope::tests::cfg_test_recogniser_rejects_cfg_feature_test ... ok
[INFO] [stdout] test scope::tests::cfg_test_recogniser_rejects_cfg_not_test ... ok
[INFO] [stdout] test scope::tests::m1_does_not_reach_into_nested_crate ... ok
[INFO] [stdout] test scan_tests::scope_m4_wiring_inline_cfg_test_block_suppresses_finding ... ok
[INFO] [stdout] test scope::tests::cfg_test_recogniser_accepts_cfg_test ... ok
[INFO] [stdout] test scope::tests::m4_does_not_range_a_non_cfg_test_mod ... ok
[INFO] [stdout] test scope::tests::m1_fires_for_tests_dir ... ok
[INFO] [stdout] test scan_tests::two_rules_fire_on_one_file ... ok
[INFO] [stdout] test scan_tests::reports_missing_overflow_checks_without_any_arithmetic_finding ... ok
[INFO] [stdout] test scan_tests::scope_m1_m3_wiring_skips_test_and_cfg_test_files ... ok
[INFO] [stdout] test scope::tests::cfg_test_recogniser_accepts_cfg_all_test ... ok
[INFO] [stdout] test scope::tests::m3_fires_for_cfg_test_mod_declaration ... ok
[INFO] [stdout] test scope::tests::m2_does_not_fire_without_cargo_fuzz_key ... ok
[INFO] [stdout] test scope::tests::m4_drops_finding_inside_cfg_test_block_and_keeps_finding_outside ... ok
[INFO] [stdout] test suppress::tests::bracket_accounting_handles_open_and_close_on_same_line ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_a_different_rule_id ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_vl001_when_only_check_doc_comment_present ... ok
[INFO] [stdout] test suppress::tests::does_not_cross_closing_brace_even_with_single_line_attribute ... ok
[INFO] [stdout] test suppress::tests::does_not_cross_a_closing_brace ... ok
[INFO] [stdout] test scan_tests::emits_one_project_finding_for_a_workspace_missing_overflow_checks ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_vl004_without_allow_comment ... ok
[INFO] [stdout] test scope::tests::m3_does_not_fire_without_cfg_test_attribute ... ok
[INFO] [stdout] test scan_tests::a_workspace_with_overflow_checks_produces_no_vl003 ... ok
[INFO] [stdout] test scope::tests::m2_fires_for_cargo_fuzz_crate ... ok
[INFO] [stdout] test scan::tests::collects_rust_files_and_skips_target_and_hidden ... ok
[INFO] [stdout] test scan_tests::scans_a_directory_and_skips_unparsable_files ... ok
[INFO] [stdout] test scan_tests::scan_drops_suppressed_findings ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_when_rule_id_is_a_prefix_of_a_longer_token ... ok
[INFO] [stdout] test suppress::tests::leaves_unmarked_findings_alone ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_when_unrelated_line_breaks_the_block ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_when_rule_id_is_a_suffix_of_a_longer_token ... ok
[INFO] [stdout] test suppress::tests::suppresses_vl001_via_comment_above_check_doc_comment ... ok
[INFO] [stdout] test suppress::tests::suppresses_from_the_line_above ... ok
[INFO] [stdout] test suppress::tests::suppresses_vl005_from_comment_above ... ok
[INFO] [stdout] test suppress::tests::suppresses_vl004_via_comment_above_account_attribute ... ok
[INFO] [stdout] test suppress::tests::suppresses_vl002_from_comment_above ... ok
[INFO] [stdout] test suppress::tests::suppresses_when_multiple_ids_listed_and_rule_matches ... ok
[INFO] [stdout] test usesite::tests::a_fn_addressable_two_ways_keeps_both_access_modes ... ok
[INFO] [stdout] test usesite::tests::a_plain_parameter_is_not_a_context_parameter ... ok
[INFO] [stdout] test usesite::tests::a_program_wrapper_and_the_handler_it_forwards_to_are_both_found ... ok
[INFO] [stdout] test usesite::tests::a_callee_taking_a_different_accounts_struct_is_not_a_use_site ... ok
[INFO] [stdout] test usesite::tests::captures_the_binding_name_instead_of_assuming_ctx ... ok
[INFO] [stdout] test suppress::tests::does_not_suppress_when_rule_id_has_trailing_alphanumeric ... ok
[INFO] [stdout] test usesite::tests::extracts_the_context_struct_name_from_every_shape ... ok
[INFO] [stdout] test usesite::tests::collects_functions_nested_in_inline_modules ... ok
[INFO] [stdout] test tests::version_is_reported ... ok
[INFO] [stdout] test usesite::tests::a_non_identifier_parameter_holds_its_position_with_an_empty_name ... ok
[INFO] [stdout] test usesite::tests::functions_named_returns_a_same_crate_helper_with_its_parameters ... ok
[INFO] [stdout] test usesite::tests::finds_a_handler_declared_in_another_file ... ok
[INFO] [stdout] test usesite::tests::a_file_that_can_no_longer_be_read_yields_no_use_sites ... ok
[INFO] [stdout] test suppress::tests::suppresses_from_a_trailing_comment_on_the_same_line ... ok
[INFO] [stdout] test usesite::tests::records_a_method_with_its_impl_self_type_and_skips_the_receiver ... ok
[INFO] [stdout] test usesite::tests::finds_an_impl_method_as_a_self_use_site ... ok
[INFO] [stdout] test usesite::tests::lookups_are_scoped_to_the_querying_files_own_crate ... ok
[INFO] [stdout] test rules::init_authority::tests::every_marker_name_fires_in_the_marginfi_shape ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 244 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/vaultlint-2649df33297f7101)
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test tests::serde_json_broken_pipe_propagates_as_io_error ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/api_surface.rs (/opt/rustwide/target/release/deps/api_surface-9109c16bfdf459f4)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test severity_display_and_from_str_round_trip ... ok
[INFO] [stdout] test json_round_trip_of_scan_report ... ok
[INFO] [stdout] test json_round_trip_of_skipped_files ... ok
[INFO] [stdout] test scan_options_can_be_constructed_via_new ... ok
[INFO] [stdout] test public_types_implement_debug ... ok
[INFO] [stdout] test severity_from_str_rejects_unknown_strings ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/examples.rs (/opt/rustwide/target/release/deps/examples-8d6f29e7bf6c7487)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test every_vulnerable_example_is_detected_at_the_expected_line ... ok
[INFO] [stdout] test relative_scan_root_sees_workspace_overflow_checks_above_cwd ... ok
[INFO] [stdout] test the_clean_example_produces_no_findings ... ok
[INFO] [stdout] → analyzing 3 Rust files …
[INFO] [stdout] 
[INFO] [stdout] ✓ no issues found
[INFO] [stdout] → analyzing 5 Rust files …
[INFO] [stdout] 
[INFO] [stdout] ✗ HIGH  missing owner check
[INFO] [stdout]         examples/vulnerable/missing_owner.rs:5
[INFO] [stdout]         Account data is deserialised without verifying the account owner. An attacker can pass a look-alike account owned by another program.
[INFO] [stdout]         Use `Account<'info, T>`, which checks the owner and discriminator, or add `require_keys_eq!(*account.owner, crate::ID)` before reading.
[INFO] [stdout]         https://vaultlint.com/rules/VL002/
[INFO] [stdout] 
[INFO] [stdout] ⚠ MED  non-canonical PDA bump
[INFO] [stdout]         examples/vulnerable/pda_bump.rs:7
[INFO] [stdout]         `vault` uses `bump = user_bump`, where `user_bump` is an `#[instruction]` argument. An attacker controls this value and can pass a non-canonical bump to address a different account.
[INFO] [stdout]         Store the canonical bump (from `init`) in the account data and validate with `bump = <account>.bump`.
[INFO] [stdout]         https://vaultlint.com/rules/VL004/
[INFO] [stdout] 
[INFO] [stdout] ⚠ MED  unchecked CPI to unknown program
[INFO] [stdout]         examples/vulnerable/unchecked_cpi.rs:10
[INFO] [stdout]         `*ctx.accounts.target_program.key` supplies the program id for this CPI, and nothing in the handler proves which program it is. An attacker who controls that account can point the invocation at their own program.
[INFO] [stdout]         Use Anchor's typed CPI helpers, or verify the id first, e.g. `require_keys_eq!(program.key(), expected::ID)`.
[INFO] [stdout]         https://vaultlint.com/rules/VL005/
[INFO] [stdout] 
[INFO] [stdout] ⚠ MED  unproven authority on initialization
[INFO] [stdout]         examples/vulnerable/unproven_authority.rs:27
[INFO] [stdout]         `authority` is an unvalidated account whose key is baked into the seeds of `user_account`, initialised by this instruction, and read by the handler. Nothing proves the account authorised this, so anyone can create `user_account` naming an arbitrary `authority`.
[INFO] [stdout]         Declare the field as `Signer<'info>` if it must authorise the instruction, or bind it to an account whose authority was already proven (`has_one = ...`, `constraint = ...`). If the permissionless designation is intended, suppress the finding.
[INFO] [stdout]         https://vaultlint.com/rules/VL001/
[INFO] [stdout] 
[INFO] [stdout] ⚠ LOW  unchecked arithmetic
[INFO] [stdout]         examples/vulnerable/unchecked_math.rs:4
[INFO] [stdout]         Unchecked subtraction writes into a struct field, and this workspace does not enable `overflow-checks`, so an overflow wraps silently instead of aborting the transaction.
[INFO] [stdout]         Enable `overflow-checks` for the release profile, or use `checked_add` / `checked_sub` / `checked_mul` and handle the `None` case.
[INFO] [stdout]         https://vaultlint.com/rules/VL003/
[INFO] [stdout] 
[INFO] [stdout] ⚠ LOW  unchecked arithmetic
[INFO] [stdout]         examples/vulnerable/unchecked_math.rs:5
[INFO] [stdout]         Unchecked addition writes into a struct field, and this workspace does not enable `overflow-checks`, so an overflow wraps silently instead of aborting the transaction.
[INFO] [stdout]         Enable `overflow-checks` for the release profile, or use `checked_add` / `checked_sub` / `checked_mul` and handle the `None` case.
[INFO] [stdout]         https://vaultlint.com/rules/VL003/
[INFO] [stdout] 
[INFO] [stdout] 6 issues found · 1 high · 3 medium · 2 low
[INFO] [stdout] test the_binary_succeeds_on_clean_code ... ok
[INFO] [stdout] test the_binary_fails_the_build_on_high_severity_findings ... ok
[INFO] [stderr]      Running tests/robustness.rs (/opt/rustwide/target/release/deps/robustness-e7de4f6259f1d6ea)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test skipped_file_reason_contains_full_error_chain ... ok
[INFO] [stdout] test broken_pipe_exits_zero_with_no_stderr ... ok
[INFO] [stdout] test a_file_past_the_depth_limit_is_reported_as_skipped ... ok
[INFO] [stderr]      Running tests/sarif.rs (/opt/rustwide/target/release/deps/sarif-9962cd836e64e3e6)
[INFO] [stdout] test deep_nesting_does_not_crash_the_binary ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test json_format_reports_unparseable_file_in_skipped_array ... ok
[INFO] [stdout] test json_format_emits_envelope_with_findings_array ... ok
[INFO] [stdout] test sarif_relative_scan_root_emits_relative_uris_with_base_id ... ok
[INFO] [stdout] test sarif_and_json_exit_zero_on_broken_pipe ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests vaultlint
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test src/rules/access_control.rs - rules::access_control (line 3) ... ignored
[INFO] [stdout] test src/rules/owner.rs - rules::owner::collect_let_bindings (line 352) ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234", kill_on_drop: false }`
[INFO] [stdout] d85064cab8d048e09ddaf205f166e2f5e0e5336b41252beb51fe14cdb407d234
