Skip to content

Commit a2e111b

Browse files
committed
Merge bitcoin/bitcoin#27765: test: Throw error when -signetchallenge is non-hex
fa6b11a test: Throw error when -signetchallenge is non-hex (MarcoFalke) Pull request description: Instead of silently parsing non-hex to an empty challenge, throw an error. Also, add missing includes while touching the file. ACKs for top commit: kevkevinpal: ACK [fa6b11a](bitcoin/bitcoin@fa6b11a) kallewoof: ACK fa6b11a TheCharlatan: Nice, ACK fa6b11a Tree-SHA512: 018ebbbf819ba7cdf0c6dd294fdfaa5ddb81b87058a8b9c57b96066d5b07e1656fd78f18e3cef375aebefa191fa515c2c70bc764880fa05f98f526334431a616
2 parents b5ed656 + fa6b11a commit a2e111b

File tree

5 files changed

+22
-23
lines changed

5 files changed

+22
-23
lines changed

src/chainparams.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@
66
#include <chainparams.h>
77

88
#include <chainparamsbase.h>
9-
#include <chainparamsseeds.h>
109
#include <common/args.h>
11-
#include <consensus/merkle.h>
10+
#include <consensus/params.h>
1211
#include <deploymentinfo.h>
13-
#include <hash.h> // for signet block challenge hash
1412
#include <logging.h>
15-
#include <script/interpreter.h>
13+
#include <tinyformat.h>
1614
#include <util/chaintype.h>
15+
#include <util/strencodings.h>
1716
#include <util/string.h>
1817

19-
#include <assert.h>
18+
#include <cassert>
19+
#include <cstdint>
20+
#include <limits>
21+
#include <stdexcept>
22+
#include <vector>
2023

2124
void ReadSigNetArgs(const ArgsManager& args, CChainParams::SigNetOptions& options)
2225
{
@@ -26,9 +29,13 @@ void ReadSigNetArgs(const ArgsManager& args, CChainParams::SigNetOptions& option
2629
if (args.IsArgSet("-signetchallenge")) {
2730
const auto signet_challenge = args.GetArgs("-signetchallenge");
2831
if (signet_challenge.size() != 1) {
29-
throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__));
32+
throw std::runtime_error("-signetchallenge cannot be multiple values.");
3033
}
31-
options.challenge.emplace(ParseHex(signet_challenge[0]));
34+
const auto val{TryParseHex<uint8_t>(signet_challenge[0])};
35+
if (!val) {
36+
throw std::runtime_error(strprintf("-signetchallenge must be hex, not '%s'.", signet_challenge[0]));
37+
}
38+
options.challenge.emplace(*val);
3239
}
3340
}
3441

src/chainparams.h

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,9 @@
66
#ifndef BITCOIN_CHAINPARAMS_H
77
#define BITCOIN_CHAINPARAMS_H
88

9-
#include <kernel/chainparams.h>
9+
#include <kernel/chainparams.h> // IWYU pragma: export
1010

11-
#include <consensus/params.h>
12-
#include <netaddress.h>
13-
#include <primitives/block.h>
14-
#include <protocol.h>
15-
#include <util/chaintype.h>
16-
#include <util/hash_type.h>
17-
18-
#include <cstdint>
1911
#include <memory>
20-
#include <string>
21-
#include <unordered_map>
22-
#include <vector>
2312

2413
class ArgsManager;
2514

src/util/strencodings.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#include <cstdint>
1818
#include <limits>
1919
#include <optional>
20-
#include <string>
21-
#include <string_view>
20+
#include <string> // IWYU pragma: export
21+
#include <string_view> // IWYU pragma: export
2222
#include <system_error>
2323
#include <type_traits>
2424
#include <vector>

src/util/string.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
#include <cstring>
1313
#include <locale>
1414
#include <sstream>
15-
#include <string>
16-
#include <string_view>
15+
#include <string> // IWYU pragma: export
16+
#include <string_view> // IWYU pragma: export
1717
#include <vector>
1818

1919
void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute);

test/functional/feature_signet.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ def run_test(self):
7676
self.log.info("test that signet logs the network magic on node start")
7777
with self.nodes[0].assert_debug_log(["Signet derived magic (message start)"]):
7878
self.restart_node(0)
79+
self.stop_node(0)
80+
self.nodes[0].assert_start_raises_init_error(extra_args=["-signetchallenge=abc"], expected_msg="Error: -signetchallenge must be hex, not 'abc'.")
81+
self.nodes[0].assert_start_raises_init_error(extra_args=["-signetchallenge=abc"] * 2, expected_msg="Error: -signetchallenge cannot be multiple values.")
7982

8083

8184
if __name__ == '__main__':

0 commit comments

Comments
 (0)