diff options
author | MacroFake <falke.marco@gmail.com> | 2022-10-31 16:48:51 +0100 |
---|---|---|
committer | MacroFake <falke.marco@gmail.com> | 2022-10-31 16:48:56 +0100 |
commit | 65c2f787c59abe1d9fbdd65e44b7cb35f2a053a1 (patch) | |
tree | cb26b897ea3f456615f152c91d6f0cbff32f9f13 | |
parent | 40b69fb06e49eef5d86ec0bd0d7e3033fbdbfb6d (diff) | |
parent | f8ed34d1a9faf373b96842c26a408b039bcdfc51 (diff) | |
download | bitcoin-65c2f787c59abe1d9fbdd65e44b7cb35f2a053a1.tar.xz |
Merge bitcoin/bitcoin#26411: [23.1] Backports
f8ed34d1a9faf373b96842c26a408b039bcdfc51 rpc: add non-regression test about deriveaddresses crash when index is 2147483647 (muxator)
d9f1c89e4967da4681f8c595b46cb1475e3d4897 rpc: fix crash in deriveaddresses when derivation index is 2147483647 (muxator)
bbea830a966a4a6045c7420743395d5253203f00 Adjust `.tx/config` for new Transifex CLI (Hennadii Stepanov)
Pull request description:
Backports:
* https://github.com/bitcoin/bitcoin/pull/26275
* https://github.com/bitcoin/bitcoin/pull/26321
Will leave open to collect remaining backports before a 23.1.
ACKs for top commit:
MarcoFalke:
cherry-pick ACK f8ed34d1a9faf373b96842c26a408b039bcdfc51 🚝
Tree-SHA512: 2a96f66b0d81457a7017b0f4b041a7742008374d00a22d828502bfe170bfebb413e4e63382b10b9e2e250cb9e1be1a41030b8b6c5be42ffb23964808b12ee343
-rw-r--r-- | .tx/config | 2 | ||||
-rw-r--r-- | src/rpc/misc.cpp | 2 | ||||
-rwxr-xr-x | test/functional/rpc_deriveaddresses.py | 7 |
3 files changed, 9 insertions, 2 deletions
diff --git a/.tx/config b/.tx/config index c4fe7cc324..e64f73ae33 100644 --- a/.tx/config +++ b/.tx/config @@ -1,7 +1,7 @@ [main] host = https://www.transifex.com -[bitcoin.qt-translation-023x] +[o:bitcoin:p:bitcoin:r:qt-translation-023x] file_filter = src/qt/locale/bitcoin_<lang>.xlf source_file = src/qt/locale/bitcoin_en.xlf source_lang = en diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 2dace52777..5a8cc8fa78 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -284,7 +284,7 @@ static RPCHelpMan deriveaddresses() UniValue addresses(UniValue::VARR); - for (int i = range_begin; i <= range_end; ++i) { + for (int64_t i = range_begin; i <= range_end; ++i) { FlatSigningProvider provider; std::vector<CScript> scripts; if (!desc->Expand(i, key_provider, scripts, provider)) { diff --git a/test/functional/rpc_deriveaddresses.py b/test/functional/rpc_deriveaddresses.py index 42d7d59d56..a69326736d 100755 --- a/test/functional/rpc_deriveaddresses.py +++ b/test/functional/rpc_deriveaddresses.py @@ -44,6 +44,13 @@ class DeriveaddressesTest(BitcoinTestFramework): combo_descriptor = descsum_create("combo(tprv8ZgxMBicQKsPd7Uf69XL1XwhmjHopUGep8GuEiJDZmbQz6o58LninorQAfcKZWARbtRtfnLcJ5MQ2AtHcQJCCRUcMRvmDUjyEmNUWwx8UbK/1/1/0)") assert_equal(self.nodes[0].deriveaddresses(combo_descriptor), ["mtfUoUax9L4tzXARpw1oTGxWyoogp52KhJ", "mtfUoUax9L4tzXARpw1oTGxWyoogp52KhJ", address, "2NDvEwGfpEqJWfybzpKPHF2XH3jwoQV3D7x"]) + # Before #26275, bitcoind would crash when deriveaddresses was + # called with derivation index 2147483647, which is the maximum + # positive value of a signed int32, and - currently - the + # maximum value that the deriveaddresses bitcoin RPC call + # accepts as derivation index. + assert_equal(self.nodes[0].deriveaddresses(descsum_create("wpkh(tprv8ZgxMBicQKsPd7Uf69XL1XwhmjHopUGep8GuEiJDZmbQz6o58LninorQAfcKZWARbtRtfnLcJ5MQ2AtHcQJCCRUcMRvmDUjyEmNUWwx8UbK/1/1/*)"), [2147483647, 2147483647]), ["bcrt1qtzs23vgzpreks5gtygwxf8tv5rldxvvsyfpdkg"]) + hardened_without_privkey_descriptor = descsum_create("wpkh(tpubD6NzVbkrYhZ4WaWSyoBvQwbpLkojyoTZPRsgXELWz3Popb3qkjcJyJUGLnL4qHHoQvao8ESaAstxYSnhyswJ76uZPStJRJCTKvosUCJZL5B/1'/1/0)") assert_raises_rpc_error(-5, "Cannot derive script without private keys", self.nodes[0].deriveaddresses, hardened_without_privkey_descriptor) |