Skip to content

Commit 874da96

Browse files
committed
Merge bitcoin/bitcoin#32240: feefrac test: avoid integer overflow (bugfix)
a2bc330 feefrac test: avoid integer overflow (bugfix) (Pieter Wuille) Pull request description: The `feefrac_mul_div` fuzz test fails after #30535 with the following (base64) input: `Nb6Fc/97AACAAAD/ewAAgAAAAIAAAACAAAAAoA==` (see https://cirrus-ci.com/task/5240029192126464?logs=ci#L3353). This is caused by an internal multiplication inside `CFeeRate` that *just* exceeds the limit of the `int64_t` type. Fix that by tightening the bounds slightly further. ACKs for top commit: sr-gi: utACK a2bc330 instagibbs: ACK a2bc330 glozow: ACK a2bc330, was able to reproduce + verify this fix Tree-SHA512: cfbcdc8becfd518f4349ddc00c9af3ed0a23bb9534af71cc21df167d7038e5967127e5d97c4b3e8aeff6bf071c4f630c32ffaf81d8ec227954d21fdcbe205333
2 parents bb92bb3 + a2bc330 commit 874da96

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/test/fuzz/feefrac.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,9 @@ FUZZ_TARGET(feefrac_mul_div)
220220
assert(res == res_fee);
221221

222222
// Compare approximately with CFeeRate.
223-
if (mul64 <= std::numeric_limits<int64_t>::max() / 1000 &&
224-
mul64 >= std::numeric_limits<int64_t>::min() / 1000 &&
225-
quot_abs <= arith_uint256{std::numeric_limits<int64_t>::max() / 1000}) {
223+
if (mul64 < std::numeric_limits<int64_t>::max() / 1000 &&
224+
mul64 > std::numeric_limits<int64_t>::min() / 1000 &&
225+
quot_abs < arith_uint256{std::numeric_limits<int64_t>::max() / 1000}) {
226226
CFeeRate feerate(mul64, (uint32_t)div);
227227
CAmount feerate_fee{feerate.GetFee(mul32)};
228228
auto allowed_gap = static_cast<int64_t>(mul32 / 1000 + 3 + round_down);

0 commit comments

Comments
 (0)