Skip to content

Commit addf9d6

Browse files
author
muxator
committed
rpc: fix crash in deriveaddresses when derivation index is 2147483647
2147483647 is the maximum positive value of a signed int32, and - currently - the maximum value that the deriveaddresses bitcoin RPC call accepts as derivation index due to its input validation routines. Before this change, when the derivation index (and thus range_end) reached std::numeric_limits<int_32_t>::max(), the "i" variable in the for cycle (which is declared as int, and as such 32 bits in size on most platforms) would be incremented at the end of the first iteration and then warp back to -2147483648. This caused SIGABRT in bitcoind and a core dump. This change assigns "i" an explicit size of 64 bits on every platform, sidestepping the problem. Fixes #26274.
1 parent 73b6171 commit addf9d6

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/rpc/output_script.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ static RPCHelpMan deriveaddresses()
273273

274274
UniValue addresses(UniValue::VARR);
275275

276-
for (int i = range_begin; i <= range_end; ++i) {
276+
for (int64_t i = range_begin; i <= range_end; ++i) {
277277
FlatSigningProvider provider;
278278
std::vector<CScript> scripts;
279279
if (!desc->Expand(i, key_provider, scripts, provider)) {

0 commit comments

Comments
 (0)