Skip to content

Commit 8a44d7d

Browse files
committed
node: use uint256::FromUserHex for -minimumchainwork parsing
Removes dependency on unsafe and deprecated uint256S. This makes parsing more strict, by returning an error when the input contains more than 64 hex digits.
1 parent 70e2c87 commit 8a44d7d

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

src/node/chainstatemanager_args.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@ util::Result<void> ApplyArgsManOptions(const ArgsManager& args, ChainstateManage
3232
if (auto value{args.GetBoolArg("-checkpoints")}) opts.checkpoints_enabled = *value;
3333

3434
if (auto value{args.GetArg("-minimumchainwork")}) {
35-
if (!IsHexNumber(*value)) {
36-
return util::Error{strprintf(Untranslated("Invalid non-hex (%s) minimum chain work value specified"), *value)};
35+
if (auto min_work{uint256::FromUserHex(*value)}) {
36+
opts.minimum_chain_work = UintToArith256(*min_work);
37+
} else {
38+
return util::Error{strprintf(Untranslated("Invalid minimum work specified (%s), must be up to %d hex digits"), *value, uint256::size() * 2)};
3739
}
38-
opts.minimum_chain_work = UintToArith256(uint256S(*value));
3940
}
4041

4142
if (auto value{args.GetArg("-assumevalid")}) opts.assumed_valid_block = uint256S(*value);

src/test/validation_chainstatemanager_tests.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,8 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_args, BasicTestingSetup)
820820
BOOST_CHECK_EQUAL(get_valid_opts({"-nominimumchainwork"}).minimum_chain_work.value().GetCompact(), 0U);
821821
BOOST_CHECK_EQUAL(get_valid_opts({"-minimumchainwork=0x1234"}).minimum_chain_work.value().GetCompact(), 0x02123400U);
822822

823-
BOOST_CHECK(!get_opts({"-minimumchainwork=xyz"})); // invalid hex characters
823+
BOOST_CHECK(!get_opts({"-minimumchainwork=xyz"})); // invalid hex characters
824+
BOOST_CHECK(!get_opts({"-minimumchainwork=01234567890123456789012345678901234567890123456789012345678901234"})); // > 64 hex chars
824825
}
825826

826827
BOOST_AUTO_TEST_SUITE_END()

test/functional/feature_minchainwork.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def run_test(self):
110110
self.stop_node(0)
111111
self.nodes[0].assert_start_raises_init_error(
112112
["-minimumchainwork=test"],
113-
expected_msg='Error: Invalid non-hex (test) minimum chain work value specified',
113+
expected_msg='Error: Invalid minimum work specified (test), must be up to 64 hex digits',
114114
)
115115

116116

0 commit comments

Comments
 (0)