fuzz: wallet: add target for tx scanning #32993

pull brunoerg wants to merge 1 commits into bitcoin:master from brunoerg:2025-06-fuzz-wallet-scan changing 2 files +111 −0
  1. brunoerg commented at 1:15 PM on July 16, 2025: contributor

    Tracking issue (#29901)

    This PR adds a fuzz target for wallet tx scanning (ScanForWalletTransactions). Unfortunately, it's not a regression test for the issue #31474 since it would require a more complex scenario/async operations.

  2. DrahtBot added the label Tests on Jul 16, 2025
  3. DrahtBot commented at 1:15 PM on July 16, 2025: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/32993.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Stale ACK Chand-ra

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    No conflicts as of last run.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

    LLM Linter (✨ experimental)

    Possible places where named args for integral literals may be used (e.g. func(x, /*named_arg=*/0) in C++, and func(x, named_arg=0) in Python):

    • InitBlockFilterIndex([&]{ return interfaces::MakeChain(g_setup->m_node); }, BlockFilterType::BASIC, 1 << 20, true, false) in src/wallet/test/fuzz/scan.cpp

    <sup>2026-06-12 18:43:50</sup>

  4. brunoerg marked this as ready for review on Jul 16, 2025
  5. DrahtBot added the label CI failed on Jul 16, 2025
  6. DrahtBot commented at 3:28 PM on July 16, 2025: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task fuzzer,address,undefined,integer, no depends: https://github.com/bitcoin/bitcoin/runs/46096767347</sub> <sub>LLM reason (✨ experimental): Fuzzer crash caused by signed integer overflow in chrono.h during fuzzing process.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  7. fanquake commented at 3:38 PM on July 16, 2025: member

    https://cirrus-ci.com/task/4897452429410304?logs=ci#L6267:

    [10:48:30.374] Run wallet_scan with args ['/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz', '-max_total_time=60']INFO: Running with entropic power schedule (0xFF, 100).
    [10:48:30.374] INFO: Seed: 1927962085
    [10:48:30.374] INFO: Loaded 1 modules   (634026 inline 8-bit counters): 634026 [0x5573df666fb8, 0x5573df701c62), 
    [10:48:30.374] INFO: Loaded 1 PC tables (634026 PCs): 634026 [0x5573df701c68,0x5573e00ae708), 
    [10:48:30.374] INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes
    [10:48:30.374] /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:225:38: runtime error: signed integer overflow: -9223372036854775808 * 1000000000 cannot be represented in type 'long'
    [10:48:30.374]     [#0](/bitcoin-bitcoin/0/) 0x5573dc9108bd in std::chrono::duration<long, std::ratio<1l, 1000000000l>> std::chrono::__duration_cast_impl<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, std::ratio<1000000000l, 1l>, long, false, true>::__cast<long, std::ratio<1l, 1l>>(std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:225:38
    [10:48:30.374]     [#1](/bitcoin-bitcoin/1/) 0x5573dc9108bd in std::enable_if<__is_duration<std::chrono::duration<long, std::ratio<1l, 1000000000l>>>::value, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>::type std::chrono::duration_cast<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, long, std::ratio<1l, 1l>>(std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:287:11
    [10:48:30.374]     [#2](/bitcoin-bitcoin/2/) 0x5573dc9108bd in std::chrono::duration<long, std::ratio<1l, 1000000000l>>::duration<long, std::ratio<1l, 1l>, void>(std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:582:10
    [10:48:30.374]     [#3](/bitcoin-bitcoin/3/) 0x5573dc9108bd in std::common_type<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, std::chrono::duration<long, std::ratio<1l, 1l>>>::type std::chrono::operator+<long, std::ratio<1l, 1000000000l>, long, std::ratio<1l, 1l>>(std::chrono::duration<long, std::ratio<1l, 1000000000l>> const&, std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:702:36
    [10:48:30.374]     [#4](/bitcoin-bitcoin/4/) 0x5573dc9108bd in std::chrono::time_point<std::chrono::_V2::steady_clock, std::common_type<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, std::chrono::duration<long, std::ratio<1l, 1l>>>::type> std::chrono::operator+<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>, long, std::ratio<1l, 1l>>(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> const&, std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:1107:47
    [10:48:30.374]     [#5](/bitcoin-bitcoin/5/) 0x5573dc9108bd in wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1::operator()() const /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/./wallet/test/fuzz/scan.cpp:66:44
    [10:48:30.374]     [#6](/bitcoin-bitcoin/6/) 0x5573dc9108bd in std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> std::__invoke_impl<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&>(std::__invoke_other, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:14
    [10:48:30.374]     [#7](/bitcoin-bitcoin/7/) 0x5573dc9108bd in std::enable_if<is_invocable_r_v<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&>, std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>>::type std::__invoke_r<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&>(wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:114:9
    [10:48:30.374]     [#8](/bitcoin-bitcoin/8/) 0x5573dc9108bd in std::_Function_handler<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> (), wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290:9
    [10:48:30.374]     [#9](/bitcoin-bitcoin/9/) 0x5573dd067392 in std::function<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> ()>::operator()() const /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:9
    [10:48:30.374]     [#10](/bitcoin-bitcoin/10/) 0x5573dd067392 in wallet::WalletRescanReserver::now() const /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/wallet/./wallet/wallet.h:1110:52
    [10:48:30.374]     [#11](/bitcoin-bitcoin/11/) 0x5573dd067392 in wallet::CWallet::ScanForWalletTransactions(uint256 const&, int, std::optional<int>, wallet::WalletRescanReserver const&, bool, bool) /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/wallet/./wallet/wallet.cpp:1781:32
    [10:48:30.374]     [#12](/bitcoin-bitcoin/12/) 0x5573dc907a87 in wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>) /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/./wallet/test/fuzz/scan.cpp:108:33
    [10:48:30.374]     [#13](/bitcoin-bitcoin/13/) 0x5573dc949cee in std::function<void (std::span<unsigned char const, 18446744073709551615ul>)>::operator()(std::span<unsigned char const, 18446744073709551615ul>) const /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:9
    [10:48:30.374]     [#14](/bitcoin-bitcoin/14/) 0x5573dc949cee in test_one_input(std::span<unsigned char const, 18446744073709551615ul>) /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/util/./test/fuzz/fuzz.cpp:88:5
    [10:48:30.374]     [#15](/bitcoin-bitcoin/15/) 0x5573dc949cee in LLVMFuzzerTestOneInput /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/util/./test/fuzz/fuzz.cpp:216:5
    [10:48:30.374]     [#16](/bitcoin-bitcoin/16/) 0x5573dbf4e75f in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d8075f) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#17](/bitcoin-bitcoin/17/) 0x5573dbf4f971 in fuzzer::Fuzzer::ReadAndExecuteSeedCorpora(std::vector<fuzzer::SizedFile, std::allocator<fuzzer::SizedFile>>&) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d81971) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#18](/bitcoin-bitcoin/18/) 0x5573dbf50000 in fuzzer::Fuzzer::Loop(std::vector<fuzzer::SizedFile, std::allocator<fuzzer::SizedFile>>&) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d82000) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#19](/bitcoin-bitcoin/19/) 0x5573dbf3c655 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d6e655) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#20](/bitcoin-bitcoin/20/) 0x5573dbf68a66 in main (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d9aa66) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#21](/bitcoin-bitcoin/21/) 0x7fe3a629b1c9  (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 282c2c16e7b6600b0b22ea0c99010d2795752b5f)
    [10:48:30.374]     [#22](/bitcoin-bitcoin/22/) 0x7fe3a629b28a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 282c2c16e7b6600b0b22ea0c99010d2795752b5f)
    [10:48:30.374]     [#23](/bitcoin-bitcoin/23/) 0x5573dbf30a94 in _start (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d62a94) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374] 
    [10:48:30.374] SUMMARY: UndefinedBehaviorSanitizer: signed-integer-overflow /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:225:38 
    [10:48:30.374] MS: 0 ; base unit: 0000000000000000000000000000000000000000
    [10:48:30.375] 
    [10:48:30.375] 
    [10:48:30.375] artifact_prefix='./'; Test unit written to ./crash-da39a3ee5e6b4b0d3255bfef95601890afd80709
    [10:48:30.375] Base64: 
    
  8. brunoerg marked this as a draft on Jul 16, 2025
  9. brunoerg force-pushed on Jul 16, 2025
  10. DrahtBot removed the label CI failed on Jul 16, 2025
  11. brunoerg marked this as ready for review on Jul 16, 2025
  12. brunoerg commented at 6:13 PM on July 16, 2025: contributor

    https://cirrus-ci.com/task/4897452429410304?logs=ci#L6267:

    [10:48:30.374] Run wallet_scan with args ['/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz', '-max_total_time=60']INFO: Running with entropic power schedule (0xFF, 100).
    [10:48:30.374] INFO: Seed: 1927962085
    [10:48:30.374] INFO: Loaded 1 modules   (634026 inline 8-bit counters): 634026 [0x5573df666fb8, 0x5573df701c62), 
    [10:48:30.374] INFO: Loaded 1 PC tables (634026 PCs): 634026 [0x5573df701c68,0x5573e00ae708), 
    [10:48:30.374] INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes
    [10:48:30.374] /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:225:38: runtime error: signed integer overflow: -9223372036854775808 * 1000000000 cannot be represented in type 'long'
    [10:48:30.374]     [#0](/bitcoin-bitcoin/0/) 0x5573dc9108bd in std::chrono::duration<long, std::ratio<1l, 1000000000l>> std::chrono::__duration_cast_impl<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, std::ratio<1000000000l, 1l>, long, false, true>::__cast<long, std::ratio<1l, 1l>>(std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:225:38
    [10:48:30.374]     [#1](/bitcoin-bitcoin/1/) 0x5573dc9108bd in std::enable_if<__is_duration<std::chrono::duration<long, std::ratio<1l, 1000000000l>>>::value, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>::type std::chrono::duration_cast<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, long, std::ratio<1l, 1l>>(std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:287:11
    [10:48:30.374]     [#2](/bitcoin-bitcoin/2/) 0x5573dc9108bd in std::chrono::duration<long, std::ratio<1l, 1000000000l>>::duration<long, std::ratio<1l, 1l>, void>(std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:582:10
    [10:48:30.374]     [#3](/bitcoin-bitcoin/3/) 0x5573dc9108bd in std::common_type<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, std::chrono::duration<long, std::ratio<1l, 1l>>>::type std::chrono::operator+<long, std::ratio<1l, 1000000000l>, long, std::ratio<1l, 1l>>(std::chrono::duration<long, std::ratio<1l, 1000000000l>> const&, std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:702:36
    [10:48:30.374]     [#4](/bitcoin-bitcoin/4/) 0x5573dc9108bd in std::chrono::time_point<std::chrono::_V2::steady_clock, std::common_type<std::chrono::duration<long, std::ratio<1l, 1000000000l>>, std::chrono::duration<long, std::ratio<1l, 1l>>>::type> std::chrono::operator+<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>, long, std::ratio<1l, 1l>>(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> const&, std::chrono::duration<long, std::ratio<1l, 1l>> const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:1107:47
    [10:48:30.374]     [#5](/bitcoin-bitcoin/5/) 0x5573dc9108bd in wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1::operator()() const /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/./wallet/test/fuzz/scan.cpp:66:44
    [10:48:30.374]     [#6](/bitcoin-bitcoin/6/) 0x5573dc9108bd in std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> std::__invoke_impl<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&>(std::__invoke_other, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61:14
    [10:48:30.374]     [#7](/bitcoin-bitcoin/7/) 0x5573dc9108bd in std::enable_if<is_invocable_r_v<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&>, std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>>::type std::__invoke_r<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>>, wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&>(wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:114:9
    [10:48:30.374]     [#8](/bitcoin-bitcoin/8/) 0x5573dc9108bd in std::_Function_handler<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> (), wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>)::$_1>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:290:9
    [10:48:30.374]     [#9](/bitcoin-bitcoin/9/) 0x5573dd067392 in std::function<std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l>>> ()>::operator()() const /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:9
    [10:48:30.374]     [#10](/bitcoin-bitcoin/10/) 0x5573dd067392 in wallet::WalletRescanReserver::now() const /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/wallet/./wallet/wallet.h:1110:52
    [10:48:30.374]     [#11](/bitcoin-bitcoin/11/) 0x5573dd067392 in wallet::CWallet::ScanForWalletTransactions(uint256 const&, int, std::optional<int>, wallet::WalletRescanReserver const&, bool, bool) /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/wallet/./wallet/wallet.cpp:1781:32
    [10:48:30.374]     [#12](/bitcoin-bitcoin/12/) 0x5573dc907a87 in wallet::(anonymous namespace)::wallet_scan_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>) /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/./wallet/test/fuzz/scan.cpp:108:33
    [10:48:30.374]     [#13](/bitcoin-bitcoin/13/) 0x5573dc949cee in std::function<void (std::span<unsigned char const, 18446744073709551615ul>)>::operator()(std::span<unsigned char const, 18446744073709551615ul>) const /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_function.h:591:9
    [10:48:30.374]     [#14](/bitcoin-bitcoin/14/) 0x5573dc949cee in test_one_input(std::span<unsigned char const, 18446744073709551615ul>) /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/util/./test/fuzz/fuzz.cpp:88:5
    [10:48:30.374]     [#15](/bitcoin-bitcoin/15/) 0x5573dc949cee in LLVMFuzzerTestOneInput /ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/src/test/fuzz/util/./test/fuzz/fuzz.cpp:216:5
    [10:48:30.374]     [#16](/bitcoin-bitcoin/16/) 0x5573dbf4e75f in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d8075f) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#17](/bitcoin-bitcoin/17/) 0x5573dbf4f971 in fuzzer::Fuzzer::ReadAndExecuteSeedCorpora(std::vector<fuzzer::SizedFile, std::allocator<fuzzer::SizedFile>>&) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d81971) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#18](/bitcoin-bitcoin/18/) 0x5573dbf50000 in fuzzer::Fuzzer::Loop(std::vector<fuzzer::SizedFile, std::allocator<fuzzer::SizedFile>>&) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d82000) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#19](/bitcoin-bitcoin/19/) 0x5573dbf3c655 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d6e655) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#20](/bitcoin-bitcoin/20/) 0x5573dbf68a66 in main (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d9aa66) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374]     [#21](/bitcoin-bitcoin/21/) 0x7fe3a629b1c9  (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 282c2c16e7b6600b0b22ea0c99010d2795752b5f)
    [10:48:30.374]     [#22](/bitcoin-bitcoin/22/) 0x7fe3a629b28a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 282c2c16e7b6600b0b22ea0c99010d2795752b5f)
    [10:48:30.374]     [#23](/bitcoin-bitcoin/23/) 0x5573dbf30a94 in _start (/ci_container_base/ci/scratch/build-x86_64-pc-linux-gnu/bin/fuzz+0x1d62a94) (BuildId: 8f6fd4c0e394fcf4793e14ca683880501003032e)
    [10:48:30.374] 
    [10:48:30.374] SUMMARY: UndefinedBehaviorSanitizer: signed-integer-overflow /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/chrono.h:225:38 
    [10:48:30.374] MS: 0 ; base unit: 0000000000000000000000000000000000000000
    [10:48:30.375] 
    [10:48:30.375] 
    [10:48:30.375] artifact_prefix='./'; Test unit written to ./crash-da39a3ee5e6b4b0d3255bfef95601890afd80709
    [10:48:30.375] Base64: 
    

    Fixed, thanks.

  13. achow101 requested review from achow101 on Oct 22, 2025
  14. achow101 requested review from Eunovo on Oct 22, 2025
  15. fanquake added the label Fuzzing on Oct 30, 2025
  16. Chand-ra commented at 9:20 AM on December 6, 2025: none

    tACK 747d094

    The target runs without crashing.

  17. sedited requested review from rkrux on Apr 19, 2026
  18. sedited requested review from marcofleon on Apr 19, 2026
  19. achow101 referenced this in commit c680cfe343 on May 13, 2026
  20. in src/wallet/test/fuzz/scan.cpp:106 in 747d094241
     101 | +    uint256 start_block{g_setup->m_node.chain->getBlockHash(0)};
     102 | +    if (fuzzed_data_provider.ConsumeBool()) start_block = ConsumeUInt256(fuzzed_data_provider);
     103 | +    auto start_height{fuzzed_data_provider.ConsumeIntegral<int>()};
     104 | +    auto max_height{fuzzed_data_provider.ConsumeIntegral<int>()};
     105 | +
     106 | +    if (fuzzed_data_provider.ConsumeBool()) fuzzed_wallet.wallet->AbortRescan();
    


    ekzyis commented at 2:21 PM on June 12, 2026:

    nit: Is this branch needed? I don't think it leads to increased coverage somewhere. AbortRescan() runs fAbortRescan = true, but ScanForWalletTransactions() will run fAbortRescan = false before scanning.


    brunoerg commented at 6:03 PM on June 12, 2026:

    No, it's a no-op, leftover from other thing I was trying. Will remove, thank you.

  21. in src/wallet/test/fuzz/scan.cpp:56 in 747d094241 outdated
      51 | +    if (fuzzed_data_provider.ConsumeBool()) {
      52 | +        InitBlockFilterIndex([&]{ return interfaces::MakeChain(g_setup->m_node); }, BlockFilterType::BASIC, 1 << 20, true, false);
      53 | +        assert(g_setup->m_node.chain->hasBlockFilterIndex(BlockFilterType::BASIC));
      54 | +    }
      55 | +
      56 | +    if (fuzzed_data_provider.ConsumeBool()) DestroyAllBlockFilterIndexes();
    


    ekzyis commented at 4:23 PM on June 12, 2026:

    I found an input with an ASan crash after fuzzing is done:

    <details> <summary>FUZZ=wallet_scan build_fuzz/bin/fuzz -runs=1 fuzz_corpora/wallet_scan/386f79ce03c75ae120f5680cb3d0a9bcf263eec2</summary>

    $ xxd -p fuzz_corpora/wallet_scan/386f79ce03c75ae120f5680cb3d0a9bcf263eec2
    657eaf25005fffff5f1ef7f5000a25
    $ FUZZ=wallet_scan build_fuzz/bin/fuzz -runs=1 fuzz_corpora/wallet_scan/386f79ce03c75ae120f5680cb3d0a9bcf263eec2
    INFO: Running with entropic power schedule (0xFF, 100).
    INFO: Seed: 143834296
    INFO: Loaded 1 modules   (555819 inline 8-bit counters): 555819 [0x555559e0f490, 0x555559e96fbb), 
    INFO: Loaded 1 PC tables (555819 PCs): 555819 [0x555559e96fc0,0x55555a712270), 
    build_fuzz/bin/fuzz: Running 1 inputs 1 time(s) each.
    Running: fuzz_corpora/wallet_scan/386f79ce03c75ae120f5680cb3d0a9bcf263eec2
    Executed fuzz_corpora/wallet_scan/386f79ce03c75ae120f5680cb3d0a9bcf263eec2 in 53 ms
    ***
    *** NOTE: fuzzing was not performed, you have only
    ***       executed the target code on a fixed set of inputs.
    ***
    =================================================================
    ==69449==ERROR: AddressSanitizer: heap-use-after-free on address 0x7d9ff67e1f90 at pc 0x555558ce008c bp 0x7fffffff5320 sp 0x7fffffff5318
    READ of size 8 at 0x7d9ff67e1f90 thread T0 (b-test)
        [#0](/bitcoin-bitcoin/0/) 0x555558ce008b in std::__uniq_ptr_impl<ValidationSignals, std::default_delete<ValidationSignals>>::_M_ptr() const /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/unique_ptr.h:193:51
        [#1](/bitcoin-bitcoin/1/) 0x555558ce008b in std::unique_ptr<ValidationSignals, std::default_delete<ValidationSignals>>::get() const /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/unique_ptr.h:473:21
        [#2](/bitcoin-bitcoin/2/) 0x555558ce008b in std::unique_ptr<ValidationSignals, std::default_delete<ValidationSignals>>::operator bool() const /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/unique_ptr.h:490:16
        [#3](/bitcoin-bitcoin/3/) 0x555558ce008b in BaseIndex::Stop() /home/ekzyis/prog/bitcoin/build_fuzz/./index/base.cpp:457:9
        [#4](/bitcoin-bitcoin/4/) 0x555558cdf99b in BaseIndex::~BaseIndex() /home/ekzyis/prog/bitcoin/build_fuzz/./index/base.cpp:82:5
        [#5](/bitcoin-bitcoin/5/) 0x555558cf8b38 in std::_Rb_tree<BlockFilterType, std::pair<BlockFilterType const, BlockFilterIndex>, std::_Select1st<std::pair<BlockFilterType const, BlockFilterIndex>>, std::less<BlockFilterType>, std::allocator<std::pair<BlockFilterType const, BlockFilterIndex>>>::_M_drop_node(std::_Rb_tree_node<std::pair<BlockFilterType const, BlockFilterIndex>>*) /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/stl_tree.h:1273:2
        [#6](/bitcoin-bitcoin/6/) 0x555558cf8b38 in std::_Rb_tree<BlockFilterType, std::pair<BlockFilterType const, BlockFilterIndex>, std::_Select1st<std::pair<BlockFilterType const, BlockFilterIndex>>, std::less<BlockFilterType>, std::allocator<std::pair<BlockFilterType const, BlockFilterIndex>>>::_M_erase(std::_Rb_tree_node<std::pair<BlockFilterType const, BlockFilterIndex>>*) /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/stl_tree.h:2590:4
        [#7](/bitcoin-bitcoin/7/) 0x555558cea1bd in std::_Rb_tree<BlockFilterType, std::pair<BlockFilterType const, BlockFilterIndex>, std::_Select1st<std::pair<BlockFilterType const, BlockFilterIndex>>, std::less<BlockFilterType>, std::allocator<std::pair<BlockFilterType const, BlockFilterIndex>>>::~_Rb_tree() /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/stl_tree.h:1609:9
        [#8](/bitcoin-bitcoin/8/) 0x555558cea1bd in std::map<BlockFilterType, BlockFilterIndex, std::less<BlockFilterType>, std::allocator<std::pair<BlockFilterType const, BlockFilterIndex>>>::~map() /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/stl_map.h:337:22
        [#9](/bitcoin-bitcoin/9/) 0x7ffff76450d0 in __run_exit_handlers (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x450d0) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#10](/bitcoin-bitcoin/10/) 0x7ffff76451ad in exit (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x451ad) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#11](/bitcoin-bitcoin/11/) 0x55555749b685 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f47685)
        [#12](/bitcoin-bitcoin/12/) 0x5555574dcf82 in main (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f88f82)
        [#13](/bitcoin-bitcoin/13/) 0x7ffff762b284 in __libc_start_call_main (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x2b284) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#14](/bitcoin-bitcoin/14/) 0x7ffff762b337 in __libc_start_main@GLIBC_2.2.5 (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x2b337) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#15](/bitcoin-bitcoin/15/) 0x5555574829e4 in _start (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f2e9e4)
    
    0x7d9ff67e1f90 is located 272 bytes inside of 1176-byte region [0x7d9ff67e1e80,0x7d9ff67e2318)
    freed by thread T0 (b-test) here:
        [#0](/bitcoin-bitcoin/0/) 0x555557634a03 in operator delete(void*, unsigned long) (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x20e0a03)
        [#1](/bitcoin-bitcoin/1/) 0x555557d76b37 in std::default_delete<TestingSetup>::operator()(TestingSetup*) const /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/unique_ptr.h:93:2
        [#2](/bitcoin-bitcoin/2/) 0x555557d76b37 in std::unique_ptr<TestingSetup, std::default_delete<TestingSetup>>::~unique_ptr() /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/unique_ptr.h:399:4
        [#3](/bitcoin-bitcoin/3/) 0x7ffff76450d0 in __run_exit_handlers (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x450d0) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#4](/bitcoin-bitcoin/4/) 0x7ffff76451ad in exit (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x451ad) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#5](/bitcoin-bitcoin/5/) 0x55555749b685 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f47685)
        [#6](/bitcoin-bitcoin/6/) 0x5555574dcf82 in main (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f88f82)
        [#7](/bitcoin-bitcoin/7/) 0x7ffff762b284 in __libc_start_call_main (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x2b284) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#8](/bitcoin-bitcoin/8/) 0x7ffff762b337 in __libc_start_main@GLIBC_2.2.5 (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x2b337) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#9](/bitcoin-bitcoin/9/) 0x5555574829e4 in _start (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f2e9e4)
    
    previously allocated by thread T0 (b-test) here:
        [#0](/bitcoin-bitcoin/0/) 0x5555576339c3 in operator new(unsigned long) (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x20df9c3)
        [#1](/bitcoin-bitcoin/1/) 0x555557d76db8 in std::__detail::_MakeUniq<TestingSetup>::__single_object std::make_unique<TestingSetup, ChainType const&, TestOpts&>(ChainType const&, TestOpts&) /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/unique_ptr.h:1085:30
        [#2](/bitcoin-bitcoin/2/) 0x555557d768d4 in std::unique_ptr<TestingSetup, std::default_delete<TestingSetup>> MakeNoLogFileContext<TestingSetup>(ChainType, TestOpts) /home/ekzyis/prog/bitcoin/build_fuzz/./test/util/setup_common.h:270:12
        [#3](/bitcoin-bitcoin/3/) 0x555557f06cc4 in wallet::(anonymous namespace)::initialize() /home/ekzyis/prog/bitcoin/build_fuzz/./wallet/test/fuzz/scan.cpp:25:39
        [#4](/bitcoin-bitcoin/4/) 0x555557f4c959 in std::function<void ()>::operator()() const /nix/store/sca0pf46jmxva40qahkcwys5c1lvk6n2-gcc-15.2.0/include/c++/15.2.0/bits/std_function.h:593:9
        [#5](/bitcoin-bitcoin/5/) 0x555557f4c959 in initialize() /home/ekzyis/prog/bitcoin/build_fuzz/./test/fuzz/fuzz.cpp:167:5
        [#6](/bitcoin-bitcoin/6/) 0x555557f4c959 in LLVMFuzzerInitialize /home/ekzyis/prog/bitcoin/build_fuzz/./test/fuzz/fuzz.cpp:224:5
        [#7](/bitcoin-bitcoin/7/) 0x5555574987b9 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f447b9)
        [#8](/bitcoin-bitcoin/8/) 0x5555574dcf82 in main (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f88f82)
        [#9](/bitcoin-bitcoin/9/) 0x7ffff762b284 in __libc_start_call_main (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x2b284) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#10](/bitcoin-bitcoin/10/) 0x7ffff762b337 in __libc_start_main@GLIBC_2.2.5 (/nix/store/l0l2ll1lmylczj1ihqn351af2kyp5x19-glibc-2.42-51/lib/libc.so.6+0x2b337) (BuildId: 76913033e82a3d45b50fdb9773ae48a91d69ad8e)
        [#11](/bitcoin-bitcoin/11/) 0x5555574829e4 in _start (/home/ekzyis/prog/bitcoin/build_fuzz/bin/fuzz+0x1f2e9e4)
    
    SUMMARY: AddressSanitizer: heap-use-after-free /home/ekzyis/prog/bitcoin/build_fuzz/./index/base.cpp:457:9 in BaseIndex::Stop()
    Shadow bytes around the buggy address:
      0x7d9ff67e1d00: fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa
      0x7d9ff67e1d80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7d9ff67e1e00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7d9ff67e1e80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
      0x7d9ff67e1f00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
    =>0x7d9ff67e1f80: fd fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd
      0x7d9ff67e2000: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
      0x7d9ff67e2080: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
      0x7d9ff67e2100: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
      0x7d9ff67e2180: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
      0x7d9ff67e2200: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
    Shadow byte legend (one shadow byte represents 8 application bytes):
      Addressable:           00
      Partially addressable: 01 02 03 04 05 06 07 
      Heap left redzone:       fa
      Freed heap region:       fd
      Stack left redzone:      f1
      Stack mid redzone:       f2
      Stack right redzone:     f3
      Stack after return:      f5
      Stack use after scope:   f8
      Global redzone:          f9
      Global init order:       f6
      Poisoned by user:        f7
      Container overflow:      fc
      Array cookie:            ac
      Intra object redzone:    bb
      ASan internal:           fe
      Left alloca redzone:     ca
      Right alloca redzone:    cb
    ==69449==ABORTING
    

    </details>

    I think it happens when InitBlockFilterIndex() at line 52 runs, but DestroyAllBlockFilterIndexes() here doesn't. This input doesn't crash anymore when I unconditionally call DestroyAllBlockFilterIndexes() at the end:

    <details> <summary>patch</summary>

    diff --git a/src/wallet/test/fuzz/scan.cpp b/src/wallet/test/fuzz/scan.cpp
    index 92d149d216f..cf1bf5cc4dc 100644
    --- a/src/wallet/test/fuzz/scan.cpp
    +++ b/src/wallet/test/fuzz/scan.cpp
    @@ -106,6 +106,8 @@ FUZZ_TARGET(wallet_scan, .init = initialize)
         if (fuzzed_data_provider.ConsumeBool()) fuzzed_wallet.wallet->AbortRescan();
    
         (void)fuzzed_wallet.wallet->ScanForWalletTransactions(start_block, start_height, max_height, reserver, /*fUpdate=*/fuzzed_data_provider.ConsumeBool(), /*save_progress=*/false);
    +
    +    DestroyAllBlockFilterIndexes();
     }
     } // namespace
     } // namespace wallet
    

    </details>

    Not sure if that's an appropriate patch, though.


    brunoerg commented at 6:15 PM on June 12, 2026:

    Nice catch, it's correct. We should call DestroyAllBlockFilterIndexes() at the end of the iteration. It clears the g_filter_indexes registry that lives outside the per-iteration TestingSetup, so the filter index doesn't survive into the next fuzz iteration.

  22. ekzyis commented at 5:04 PM on June 12, 2026: none

    tested 747d0942413, left two comments.

    The ASan crash is not a target crash since it happens after fuzzing is done, but should be addressed before merge, I think. Could be that I'm misreading the importance of it, though.

  23. brunoerg force-pushed on Jun 12, 2026
  24. fuzz: add target for wallet tx scanning fbeba67512
  25. brunoerg force-pushed on Jun 12, 2026
  26. DrahtBot added the label CI failed on Jun 12, 2026
  27. DrahtBot commented at 6:44 PM on June 12, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task lint: https://github.com/bitcoin/bitcoin/actions/runs/27434430642/job/81092671475</sub> <sub>LLM reason (✨ experimental): CI failed because the lint step detected forbidden fs::remove_all usage (remove_all check) in src/wallet/test/fuzz/scan.cpp.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  28. brunoerg commented at 6:44 PM on June 12, 2026: contributor

    Force-pushed:

  29. brunoerg marked this as a draft on Jun 12, 2026
  30. brunoerg commented at 6:53 PM on June 12, 2026: contributor

    I just moved it to draft because I want to refactor some stuff here to make it more efficient (current avg exec/s is far from being good).

  31. DrahtBot removed the label CI failed on Jun 12, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-07-02 02:51 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me