Merge bitcoin/bitcoin#36092: fix: UB sanitizer in mempool estimator logging

576a0ebb53 fix: UB sanitizer in mempool estimator logging (rustaceanrob)

Pull request description:

  The following is failing in CI, when a block has `m_height` of 64 bit max:
  ```
   SUMMARY: UndefinedBehaviorSanitizer: unsigned-integer-overflow /home/runner/work/_temp/src/policy/fees/mempool_estimator.cpp:210:62
  MS: 0 ; base unit: 0000000000000000000000000000000000000000
  0x1,0x0,0x0,0x0,0x3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2f,0x0,0x3,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7a,0x3f,0x3f,0x0,0x0,0x2f,0x0,0x3,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7a,0x3f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0x18,0x0,0x0,0x85,0x3f,0xff,0xff,0xff,0xff,0xff,0x18,0x0,0x0,0x85,0xd6,0x1,0x0,0x86,0x0,0x0,0x0,0x2a,0x0,0xff,0xff,0xff,
  \001\000\000\000\003\377\377\377\377\377\377\377\377\001\000\377\377\377\377\377\377\377\377\000\000&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000/\000\003\002\002\002\002\002\002\002\000\000\000\000\000\000\000z??\000\000/\000\003\002\002\002\002\002\002\002\000\000\000\000\000\000\000z???\377\377\377\377\377\030\000\000\205?\377\377\377\377\377\030\000\000\205\326\001\000\206\000\000\000*\000\377\377\377
  artifact_prefix='./'; Test unit written to ./crash-b4333d1fe3993fe8610b86654e385682c23050b9
  Base64: AQAAAAP//////////wEA//////////8AACYAAAAAAAAAAAAAAAAAAAAAAAAvAAMCAgICAgICAAAAAAAAAHo/PwAALwADAgICAgICAgAAAAAAAAB6Pz8///////8YAACFP///////GAAAhdYBAIYAAAAqAP///w==

  ⚠️ Failure generated from target with exit code 1: ['/home/runner/work/_temp/build_ ₿🧪_/bin/fuzz', '-runs=1', PosixPath('/home/runner/work/_temp/ci/scratch_ ₿🧪_/qa-assets/fuzz_corpora/policy_estimator_io')]
  Check if using libFuzzer ... True
  Command '['docker', 'exec', '--env', 'DANGER_RUN_CI_ON_HOST=1', '8100bf684275e706787e07f8ab94431926ba5184562c52bce95c932210f6f38f', '/home/runner/work/_temp/ci/test/03_test_script.sh']' returned non-zero exit status 1.

  ```

ACKs for top commit:
  maflcko:
    lgtm ACK 576a0ebb53
  marcofleon:
    ACK 576a0ebb53
  jeanpablojp:
    tACK 576a0ebb53

Tree-SHA512: a7533e68a95b2f0200abdcf08ae72a7f3654db03cffe642ed39b0a5aa48d932a8b07ee4e4477b591a488b5358dd19fe85a03015642b663fd41a771b3090bc8a3
This commit is contained in:
merge-script
2026-08-26 16:34:02 +01:00

View File

@@ -18,6 +18,7 @@
#include <util/feefrac.h>
#include <util/fees.h>
#include <util/fs.h>
#include <util/overflow.h>
#include <util/syserror.h>
#include <validation.h>
@@ -207,10 +208,11 @@ bool MemPoolFeeRateEstimator::Read(AutoFile& file)
return false;
}
for (size_t i = 1; i < blocks.size(); ++i) {
if (blocks[i].m_height != blocks[i - 1].m_height + 1) {
const uint64_t expected_height{SaturatingAdd(blocks[i - 1].m_height, uint64_t{1})};
if (blocks[i].m_height != expected_height) {
LogWarning("%s: Non-consecutive block heights read, expected height %s but found %s; ignoring file",
FeeRateEstimatorTypeToString(FeeRateEstimatorType::MEMPOOL_POLICY),
blocks[i - 1].m_height + 1, blocks[i].m_height);
expected_height, blocks[i].m_height);
return false;
}
}