Page MenuHomePhabricator

[64-bit ints] Allow 63+sign-bit ints in ParseScript
ClosedPublic

Authored by tobias_ruck on Aug 8 2025, 10:21.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Commits
rABC7ff95e0577f4: [64-bit ints] Allow 63+sign-bit ints in ParseScript
Summary

After D17300, 63+sign-bit integers are now allowed in Script, if the script flag SCRIPT_ENABLE_63_BIT_INTS is enabled (currently always off).

Currently, we cannot add tests to script_tests.json, as parsing 63+sign-bit numbers fails.

This diff allows parsing all valid decimal numbers in ParseScript, i.e. any number between (including) -9223372036854775807 and +9223372036854775807.

Note: It seems like atoi64 (strtoll under the hood) makes it hard to detect faulty numbers, therefore we use our ParseInt64, which returns a boolean.

Partial backport of lotusd#71.

Test Plan

ninja check

Event Timeline

tobias_ruck retitled this revision from [int64 ints] Allow 63+sign-bit ints in ParseScript to [64-bit ints] Allow 63+sign-bit ints in ParseScript.
Fabien requested changes to this revision.Aug 11 2025, 10:02
Fabien added inline comments.
src/core_read.cpp
96

This is not the best function for the job, you should use ToIntegral<int64_t> instead of ParseInt64() since the checks are already performed.

Note: we should backport https://github.com/bitcoin/bitcoin/pull/20452 and https://github.com/bitcoin/bitcoin/pull/23227 prior to this diff.

Also using the output parameter without checking the actual returned validity flag is a bad practice. It happens to work but it's very brittle and depends on the parsing function implementation.

This revision now requires changes to proceed.Aug 11 2025, 10:02

Tail of the build log:

tests/test_iguana.py::test_script_pub_key_empty_stack ##teamcity[testStarted timestamp='2025-08-11T15:31:11.224' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_empty_stack' metainfo='test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']
PASSED             [ 55%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.237' duration='12' flowId='tests.test_iguana.test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']

tests/test_iguana.py::test_script_pub_key_false_stack ##teamcity[testStarted timestamp='2025-08-11T15:31:11.238' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_false_stack' metainfo='test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']
PASSED             [ 60%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.250' duration='11' flowId='tests.test_iguana.test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']

tests/test_iguana.py::test_script_pub_key_cleanstack ##teamcity[testStarted timestamp='2025-08-11T15:31:11.251' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_cleanstack' metainfo='test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']
PASSED              [ 65%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.259' duration='7' flowId='tests.test_iguana.test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']

tests/test_iguana.py::test_redeem_script_success ##teamcity[testStarted timestamp='2025-08-11T15:31:11.260' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_success' metainfo='test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']
PASSED                  [ 70%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.276' duration='15' flowId='tests.test_iguana.test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']

tests/test_iguana.py::test_redeem_script_error ##teamcity[testStarted timestamp='2025-08-11T15:31:11.276' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_error' metainfo='test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']
PASSED                    [ 75%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.289' duration='11' flowId='tests.test_iguana.test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']

tests/test_iguana.py::test_redeem_script_exception ##teamcity[testStarted timestamp='2025-08-11T15:31:11.289' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_exception' metainfo='test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']
PASSED                [ 80%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.302' duration='12' flowId='tests.test_iguana.test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']

tests/test_iguana.py::test_redeem_script_empty_stack ##teamcity[testStarted timestamp='2025-08-11T15:31:11.303' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_empty_stack' metainfo='test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']
PASSED              [ 85%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.316' duration='13' flowId='tests.test_iguana.test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']

tests/test_iguana.py::test_redeem_script_false ##teamcity[testStarted timestamp='2025-08-11T15:31:11.317' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_false' metainfo='test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']
PASSED                    [ 90%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.330' duration='12' flowId='tests.test_iguana.test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']

tests/test_iguana.py::test_redeem_script_cleanstack ##teamcity[testStarted timestamp='2025-08-11T15:31:11.330' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_cleanstack' metainfo='test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']
PASSED               [ 95%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.343' duration='12' flowId='tests.test_iguana.test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']

tests/test_iguana.py::test_redeem_script_input_sigchecks ##teamcity[testStarted timestamp='2025-08-11T15:31:11.344' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' metainfo='test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']
PASSED          [100%]##teamcity[testFinished timestamp='2025-08-11T15:31:11.372' duration='27' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']


============================== 20 passed in 0.36s ==============================
[194/532] Test Bitcoin utilities...
FAILED: test/CMakeFiles/check-bitcoin-util /work/abc-ci-builds/build-debug/test/CMakeFiles/check-bitcoin-util 
cd /work/abc-ci-builds/build-debug/test && /usr/bin/cmake -E make_directory /work/abc-ci-builds/build-debug/test/junit && /usr/bin/cmake -E make_directory /work/abc-ci-builds/build-debug/test/log && /usr/bin/cmake -E env /usr/bin/python3 ./util/bitcoin-util-test.py
2025-08-11 15:31:11,439 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:31:11,446 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:31:11,449 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:31:13,239 - ERROR - FAILED_TESTCASES:
['Try to parse an output script with a decimal number just above the allowed range', 'Try to parse an output script with a decimal number below the allowed range', 'Try to parse an output script with a decimal number just below the allowed range']
[240/532] Running seeder test suite
PASSED: seeder test suite
[503/532] Running pow test suite
PASSED: pow test suite
[511/532] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[520/532] Running avalanche test suite
PASSED: avalanche test suite
[524/532] Running secp256k1 test suite
PASSED: secp256k1 test suite
[531/532] Running bitcoin test suite
PASSED: bitcoin test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-debug failed with exit code 1

Tail of the build log:

[478/531] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/addressbooktests.cpp.o
[479/531] Running utility command for check-bitcoin-init_tests
[480/531] Running utility command for check-bitcoin-ismine_tests
[481/531] bitcoin: testing scriptpubkeyman_tests
[482/531] Running utility command for check-bitcoin-scriptpubkeyman_tests
[483/531] bitcoin: testing walletdb_tests
[484/531] Running utility command for check-bitcoin-walletdb_tests
[485/531] Linking CXX executable src/pow/test/test-pow
[486/531] bitcoin: testing psbt_wallet_tests
[487/531] Linking CXX executable src/seeder/test/test-seeder
[488/531] Running utility command for check-bitcoin-psbt_wallet_tests
[489/531] pow: testing daa_tests
[490/531] Running utility command for check-pow-daa_tests
[491/531] pow: testing eda_tests
[492/531] seeder: testing db_tests
[493/531] Running utility command for check-pow-eda_tests
[494/531] seeder: testing message_writer_tests
[495/531] Running utility command for check-seeder-db_tests
[496/531] Running utility command for check-seeder-message_writer_tests
[497/531] seeder: testing options_tests
[498/531] Running utility command for check-seeder-options_tests
[499/531] seeder: testing p2p_messaging_tests
[500/531] Running utility command for check-seeder-p2p_messaging_tests
[501/531] pow: testing grasberg_tests
[502/531] Running utility command for check-pow-grasberg_tests
[503/531] seeder: testing parse_name_tests
[504/531] Running utility command for check-seeder-parse_name_tests
[505/531] seeder: testing write_name_tests
[506/531] Running utility command for check-seeder-write_name_tests
[507/531] Running seeder test suite
PASSED: seeder test suite
[508/531] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/wallettests.cpp.o
[509/531] bitcoin: testing wallet_crypto_tests
[510/531] bitcoin: testing validation_chainstatemanager_tests
[511/531] Running utility command for check-bitcoin-wallet_crypto_tests
[512/531] Running utility command for check-bitcoin-validation_chainstatemanager_tests
[513/531] Linking CXX executable src/qt/test/test_bitcoin-qt
[514/531] bitcoin: testing validation_block_tests
[515/531] Running utility command for check-bitcoin-validation_block_tests
[516/531] bitcoin-qt: testing test_bitcoin-qt
[517/531] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[518/531] bitcoin: testing coins_tests
[519/531] Running utility command for check-bitcoin-coins_tests
[520/531] bitcoin: testing transaction_tests
[521/531] Running utility command for check-bitcoin-transaction_tests
[522/531] bitcoin: testing wallet_tests
[523/531] Running utility command for check-bitcoin-wallet_tests
[524/531] pow: testing aserti32d_tests
[525/531] Running utility command for check-pow-aserti32d_tests
[526/531] Running pow test suite
PASSED: pow test suite
[527/531] bitcoin: testing coinselector_tests
[528/531] Running utility command for check-bitcoin-coinselector_tests
[529/531] bitcoin: testing scriptnum_63bit_tests
[530/531] Running utility command for check-bitcoin-scriptnum_63bit_tests
[531/531] Running bitcoin test suite
PASSED: bitcoin test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1

Tail of the build log:

PASSED                 [ 50%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.363' duration='36' flowId='tests.test_iguana.test_script_pub_key_failure' name='tests.test_iguana.test_script_pub_key_failure']

tests/test_iguana.py::test_script_pub_key_empty_stack ##teamcity[testStarted timestamp='2025-08-11T15:34:33.364' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_empty_stack' metainfo='test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']
PASSED             [ 55%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.411' duration='46' flowId='tests.test_iguana.test_script_pub_key_empty_stack' name='tests.test_iguana.test_script_pub_key_empty_stack']

tests/test_iguana.py::test_script_pub_key_false_stack ##teamcity[testStarted timestamp='2025-08-11T15:34:33.411' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_false_stack' metainfo='test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']
PASSED             [ 60%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.430' duration='18' flowId='tests.test_iguana.test_script_pub_key_false_stack' name='tests.test_iguana.test_script_pub_key_false_stack']

tests/test_iguana.py::test_script_pub_key_cleanstack ##teamcity[testStarted timestamp='2025-08-11T15:34:33.431' captureStandardOutput='false' flowId='tests.test_iguana.test_script_pub_key_cleanstack' metainfo='test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']
PASSED              [ 65%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.443' duration='11' flowId='tests.test_iguana.test_script_pub_key_cleanstack' name='tests.test_iguana.test_script_pub_key_cleanstack']

tests/test_iguana.py::test_redeem_script_success ##teamcity[testStarted timestamp='2025-08-11T15:34:33.444' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_success' metainfo='test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']
PASSED                  [ 70%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.481' duration='36' flowId='tests.test_iguana.test_redeem_script_success' name='tests.test_iguana.test_redeem_script_success']

tests/test_iguana.py::test_redeem_script_error ##teamcity[testStarted timestamp='2025-08-11T15:34:33.481' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_error' metainfo='test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']
PASSED                    [ 75%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.502' duration='19' flowId='tests.test_iguana.test_redeem_script_error' name='tests.test_iguana.test_redeem_script_error']

tests/test_iguana.py::test_redeem_script_exception ##teamcity[testStarted timestamp='2025-08-11T15:34:33.502' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_exception' metainfo='test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']
PASSED                [ 80%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.531' duration='28' flowId='tests.test_iguana.test_redeem_script_exception' name='tests.test_iguana.test_redeem_script_exception']

tests/test_iguana.py::test_redeem_script_empty_stack ##teamcity[testStarted timestamp='2025-08-11T15:34:33.532' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_empty_stack' metainfo='test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']
PASSED              [ 85%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.558' duration='25' flowId='tests.test_iguana.test_redeem_script_empty_stack' name='tests.test_iguana.test_redeem_script_empty_stack']

tests/test_iguana.py::test_redeem_script_false ##teamcity[testStarted timestamp='2025-08-11T15:34:33.558' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_false' metainfo='test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']
PASSED                    [ 90%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.571' duration='12' flowId='tests.test_iguana.test_redeem_script_false' name='tests.test_iguana.test_redeem_script_false']

tests/test_iguana.py::test_redeem_script_cleanstack ##teamcity[testStarted timestamp='2025-08-11T15:34:33.572' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_cleanstack' metainfo='test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']
PASSED               [ 95%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.586' duration='13' flowId='tests.test_iguana.test_redeem_script_cleanstack' name='tests.test_iguana.test_redeem_script_cleanstack']

tests/test_iguana.py::test_redeem_script_input_sigchecks ##teamcity[testStarted timestamp='2025-08-11T15:34:33.586' captureStandardOutput='false' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' metainfo='test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']
PASSED          [100%]##teamcity[testFinished timestamp='2025-08-11T15:34:33.639' duration='51' flowId='tests.test_iguana.test_redeem_script_input_sigchecks' name='tests.test_iguana.test_redeem_script_input_sigchecks']


============================== 20 passed in 0.76s ==============================
[197/492] Running avalanche test suite
PASSED: avalanche test suite
[199/492] Test Bitcoin utilities...
FAILED: test/CMakeFiles/check-bitcoin-util /work/abc-ci-builds/build-without-wallet/test/CMakeFiles/check-bitcoin-util 
cd /work/abc-ci-builds/build-without-wallet/test && /usr/bin/cmake -E make_directory /work/abc-ci-builds/build-without-wallet/test/junit && /usr/bin/cmake -E make_directory /work/abc-ci-builds/build-without-wallet/test/log && /usr/bin/cmake -E env /usr/bin/python3 ./util/bitcoin-util-test.py
2025-08-11 15:34:34,257 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:34:34,263 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:34:34,266 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:34:36,220 - ERROR - FAILED_TESTCASES:
['Try to parse an output script with a decimal number just above the allowed range', 'Try to parse an output script with a decimal number below the allowed range', 'Try to parse an output script with a decimal number just below the allowed range']
[222/492] Running seeder test suite
PASSED: seeder test suite
[230/492] Running pow test suite
PASSED: pow test suite
[234/492] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
[491/492] Running bitcoin test suite
PASSED: bitcoin test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-without-wallet failed with exit code 1

Tail of the build log:

[484/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/test_main.cpp.o
[485/524] Running utility command for check-pow-grasberg_tests
[486/524] Running utility command for check-bitcoin-wallet_crypto_tests
[487/524] Linking CXX executable src/seeder/test/test-seeder
[488/524] seeder: testing db_tests
[489/524] Running utility command for check-seeder-db_tests
[490/524] seeder: testing message_writer_tests
[491/524] Running utility command for check-seeder-message_writer_tests
[492/524] seeder: testing options_tests
[493/524] Running utility command for check-seeder-options_tests
[494/524] seeder: testing p2p_messaging_tests
[495/524] Running utility command for check-seeder-p2p_messaging_tests
[496/524] seeder: testing parse_name_tests
[497/524] Running utility command for check-seeder-parse_name_tests
[498/524] seeder: testing write_name_tests
[499/524] Running utility command for check-seeder-write_name_tests
[500/524] Running seeder test suite
PASSED: seeder test suite
[501/524] Test Bitcoin utilities...
FAILED: test/CMakeFiles/check-bitcoin-util /work/abc-ci-builds/build-clang-tidy/test/CMakeFiles/check-bitcoin-util 
cd /work/abc-ci-builds/build-clang-tidy/test && /usr/bin/cmake -E make_directory /work/abc-ci-builds/build-clang-tidy/test/junit && /usr/bin/cmake -E make_directory /work/abc-ci-builds/build-clang-tidy/test/log && /usr/bin/cmake -E env /usr/bin/python3 ./util/bitcoin-util-test.py
2025-08-11 15:39:15,134 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:39:15,160 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:39:15,164 - ERROR - Error mismatch:
Expected: error: script parse error: decimal numeric value only allowed in the range -0x7FFFFFFFFFFFFFFF...0x7FFFFFFFFFFFFFFF
Received: error: script parse error: decimal numeric value only allowed in the range -0xFFFFFFFF...0xFFFFFFFF
2025-08-11 15:39:16,748 - ERROR - FAILED_TESTCASES:
['Try to parse an output script with a decimal number just above the allowed range', 'Try to parse an output script with a decimal number below the allowed range', 'Try to parse an output script with a decimal number just below the allowed range']
[502/524] bitcoin: testing transaction_tests
[503/524] Running utility command for check-bitcoin-transaction_tests
[504/524] bitcoin: testing validation_chainstatemanager_tests
[505/524] Running utility command for check-bitcoin-validation_chainstatemanager_tests
[506/524] pow: testing aserti32d_tests
[507/524] Running utility command for check-pow-aserti32d_tests
[508/524] Running pow test suite
PASSED: pow test suite
[509/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/util.cpp.o
[510/524] bitcoin: testing wallet_tests
[511/524] Running utility command for check-bitcoin-wallet_tests
[512/524] bitcoin: testing coinselector_tests
[513/524] Running utility command for check-bitcoin-coinselector_tests
[514/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/uritests.cpp.o
[515/524] bitcoin: testing scriptnum_63bit_tests
[516/524] Running utility command for check-bitcoin-scriptnum_63bit_tests
[517/524] Running bitcoin test suite
PASSED: bitcoin test suite
[518/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/paymentservertests.cpp.o
[519/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/__/__/wallet/test/wallet_test_fixture.cpp.o
[520/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/addressbooktests.cpp.o
[521/524] Building CXX object src/qt/test/CMakeFiles/test_bitcoin-qt.dir/wallettests.cpp.o
[522/524] Linking CXX executable src/qt/test/test_bitcoin-qt
[523/524] bitcoin-qt: testing test_bitcoin-qt
[524/524] Running bitcoin-qt test suite
PASSED: bitcoin-qt test suite
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang-tidy failed with exit code 1
This revision is now accepted and ready to land.Aug 11 2025, 22:53