mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01:00
Validate port options
Check `port` options for invalid values (ports are parsed as uint16, so in practice values >65535 are invalid; port 0 is undefined and therefore considered invalid too). This allows for an early rejection of faulty values and an supplying an informative message to the user. Splits tests in `feature_proxy.py` to cover both invalid `hostname` and `port` values. Adds a release-note as previously valid `-port` and `-rpcport` values can now result in errors.
This commit is contained in:
committed by
Amadeusz Pawlik
parent
f8387c4234
commit
04526787b5
45
src/init.cpp
45
src/init.cpp
@@ -1255,6 +1255,51 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||
// as they would never get updated.
|
||||
if (!ignores_incoming_txs) node.fee_estimator = std::make_unique<CBlockPolicyEstimator>(FeeestPath(args));
|
||||
|
||||
// Check port numbers
|
||||
for (const std::string port_option : {
|
||||
"-port",
|
||||
"-rpcport",
|
||||
}) {
|
||||
if (args.IsArgSet(port_option)) {
|
||||
const std::string port = args.GetArg(port_option, "");
|
||||
uint16_t n;
|
||||
if (!ParseUInt16(port, &n) || n == 0) {
|
||||
return InitError(InvalidPortErrMsg(port_option, port));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const std::string port_option : {
|
||||
"-i2psam",
|
||||
"-onion",
|
||||
"-proxy",
|
||||
"-rpcbind",
|
||||
"-torcontrol",
|
||||
"-whitebind",
|
||||
"-zmqpubhashblock",
|
||||
"-zmqpubhashtx",
|
||||
"-zmqpubrawblock",
|
||||
"-zmqpubrawtx",
|
||||
"-zmqpubsequence",
|
||||
}) {
|
||||
for (const std::string& socket_addr : args.GetArgs(port_option)) {
|
||||
std::string host_out;
|
||||
uint16_t port_out{0};
|
||||
if (!SplitHostPort(socket_addr, port_out, host_out)) {
|
||||
return InitError(InvalidPortErrMsg(port_option, socket_addr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const std::string& socket_addr : args.GetArgs("-bind")) {
|
||||
std::string host_out;
|
||||
uint16_t port_out{0};
|
||||
std::string bind_socket_addr = socket_addr.substr(0, socket_addr.rfind('='));
|
||||
if (!SplitHostPort(bind_socket_addr, port_out, host_out)) {
|
||||
return InitError(InvalidPortErrMsg("-bind", socket_addr));
|
||||
}
|
||||
}
|
||||
|
||||
// sanitize comments per BIP-0014, format user agent and check total size
|
||||
std::vector<std::string> uacomments;
|
||||
for (const std::string& cmt : args.GetArgs("-uacomment")) {
|
||||
|
||||
Reference in New Issue
Block a user