From face2519fac9e840d52f0334d9079e664be7eb28 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Thu, 15 May 2025 22:00:48 +0200 Subject: [PATCH] bitcoin-tx: Reject + sign in vout parsing --- src/bitcoin-tx.cpp | 7 ++++--- test/util/data/bitcoin-util-test.json | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/bitcoin-tx.cpp b/src/bitcoin-tx.cpp index 4d377a4823d..257c1061e6b 100644 --- a/src/bitcoin-tx.cpp +++ b/src/bitcoin-tx.cpp @@ -275,9 +275,10 @@ static void MutateTxAddInput(CMutableTransaction& tx, const std::string& strInpu // extract and validate vout const std::string& strVout = vStrInputParts[1]; - int64_t vout; - if (!ParseInt64(strVout, &vout) || vout < 0 || vout > static_cast(maxVout)) + const auto vout{ToIntegral(strVout)}; + if (!vout || *vout > maxVout) { throw std::runtime_error("invalid TX input vout '" + strVout + "'"); + } // extract the optional sequence number uint32_t nSequenceIn = CTxIn::SEQUENCE_FINAL; @@ -286,7 +287,7 @@ static void MutateTxAddInput(CMutableTransaction& tx, const std::string& strInpu } // append to transaction input list - CTxIn txin(*txid, vout, CScript(), nSequenceIn); + CTxIn txin{*txid, *vout, CScript{}, nSequenceIn}; tx.vin.push_back(txin); } diff --git a/test/util/data/bitcoin-util-test.json b/test/util/data/bitcoin-util-test.json index 81423724075..896decc4e3e 100644 --- a/test/util/data/bitcoin-util-test.json +++ b/test/util/data/bitcoin-util-test.json @@ -264,6 +264,14 @@ "error_txt": "error: invalid TX sequence id 'abcdef00'", "description": "Try to make invalid input replaceable" }, + { "exec": "./bitcoin-tx", + "args": + ["-create", + "in=5897de6bd6027a475eadd57019d4e6872c396d0716c4875a5f1a6fcfdf385c1f:+0"], + "return_code": 1, + "error_txt": "error: invalid TX input vout", + "description": "Tests the check for an invalid vout value when adding an input" + }, { "exec": "./bitcoin-tx", "args": ["-create",