aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfanquake <fanquake@gmail.com>2022-05-17 16:28:11 +0100
committerfanquake <fanquake@gmail.com>2022-05-17 16:39:10 +0100
commitd5d40d59f8d12cf53c5ad1ce9710f3f108cec386 (patch)
treead08cae3346d85b5548b50da4d6f0a016cb72048
parentdd8a2df488f6fbff7e7863d5278d60f266f8d2f2 (diff)
parentada8358ef54aaa04c9182afe115d8046c801bdde (diff)
Merge bitcoin/bitcoin#23679: Sanitize `port` in `addpeeraddress()`
ada8358ef54aaa04c9182afe115d8046c801bdde Sanitize port in `addpeeraddress()` (amadeuszpawlik) Pull request description: In connection to #22087, it has been [pointed out](https://github.com/bitcoin/bitcoin/pull/22087#pullrequestreview-674786285) that `addpeeraddress` needs to get its port-value sanitized. ACKs for top commit: fanquake: ACK ada8358ef54aaa04c9182afe115d8046c801bdde Tree-SHA512: 48771cd4f6940aa7840fa23488565c09dea86bd5ec5a5a1fc0374afb4857aebcd2a1f51e2d4cb7348460e0ad9793dc5d2962df457084ed2b8d8142cae650003f
-rw-r--r--src/rpc/net.cpp2
-rwxr-xr-xtest/functional/rpc_net.py4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp
index 09dc8eb3eb..ff714eaf36 100644
--- a/src/rpc/net.cpp
+++ b/src/rpc/net.cpp
@@ -932,7 +932,7 @@ static RPCHelpMan addpeeraddress()
}
const std::string& addr_string{request.params[0].get_str()};
- const uint16_t port{static_cast<uint16_t>(request.params[1].get_int())};
+ const auto port{request.params[1].getInt<uint16_t>()};
const bool tried{request.params[2].isTrue()};
UniValue obj(UniValue::VOBJ);
diff --git a/test/functional/rpc_net.py b/test/functional/rpc_net.py
index 81a3cfee97..ad8ba06824 100755
--- a/test/functional/rpc_net.py
+++ b/test/functional/rpc_net.py
@@ -257,6 +257,10 @@ class NetTest(BitcoinTestFramework):
assert_equal(node.addpeeraddress(address="", port=8333), {"success": False})
assert_equal(node.getnodeaddresses(count=0), [])
+ self.log.debug("Test that adding an address with invalid port fails")
+ assert_raises_rpc_error(-1, "JSON integer out of range", self.nodes[0].addpeeraddress, address="1.2.3.4", port=-1)
+ assert_raises_rpc_error(-1, "JSON integer out of range", self.nodes[0].addpeeraddress,address="1.2.3.4", port=65536)
+
self.log.debug("Test that adding a valid address to the tried table succeeds")
assert_equal(node.addpeeraddress(address="1.2.3.4", tried=True, port=8333), {"success": True})
with node.assert_debug_log(expected_msgs=["CheckAddrman: new 0, tried 1, total 1 started"]):