Files
bitcoin/src
merge-script 116b8c5573 Merge bitcoin/bitcoin#31213: fuzz: Fix difficulty target generation in p2p_headers_presync
a6ca8f3243 fuzz: Fix difficulty target generation in p2p_headers_presync (marcofleon)
fa327c77e3 util: Add ConsumeArithUInt256InRange fuzzing helper (marcofleon)

Pull request description:

  In the `p2p_headers_presync` fuzz target, this assertion failed:
  ```
   assert(total_work < chainman.MinimumChainWork());
   ```
  Input that triggered the failure: [p2ppresync_crash.txt](https://github.com/user-attachments/files/17620203/p2ppresync_crash.txt)

  The test previously used `ConsumeIntegralInRange` to generate header difficulty targets within a hardcoded range. The fuzzer found specific values in that range that correspond to very low thresholds due to how [`SetCompact`][setcompact-link] works. The total work of a long enough test chain ended up exceeding `MinimumChainWork`.

  Fix this by adding a new `ConsumeArithUInt256InRange` helper function and use it in the fuzz test to generate target values within the originally intended range. The target is then converted to an `nBits` value using `GetCompact()`.

  For some more context, see https://github.com/bitcoin/bitcoin/pull/30918.

  [setcompact-link]: 6463117a29/src/arith_uint256.h (L251-L271)

ACKs for top commit:
  instagibbs:
    ACK a6ca8f3243
  dergoegge:
    Code review ACK a6ca8f3243
  brunoerg:
    code review ACK a6ca8f3243

Tree-SHA512: 92013d9d37bd3f11992ee678ba9745196efbdc4d773fd14994116629260bea46ffc9fa3923d443af7b623d39c6211900ce98a349c62ad1976e12312c37ef9df0
2024-11-20 11:46:22 +00:00
..
2024-11-11 14:14:39 +00:00
2024-10-25 18:09:36 +01:00
2024-10-30 10:18:36 +00:00
2024-11-11 14:14:39 +00:00
2024-11-11 14:14:39 +00:00