Skip to content

Commit 46fcb52

Browse files
author
MacroFake
committed
Merge bitcoin/bitcoin#24944: rpc: add getblockfrompeer RPCTypeCheck and invalid input test coverage
2ef5294 rpc: add RPCTypeCheck for getblockfrompeer inputs (Jon Atack) 734b966 test: add getblockfrompeer coverage of invalid inputs (Jon Atack) Pull request description: The new getblockfrompeer RPC lacks test coverage for invalid arguments, and its error messages are not harmonized with the existing RPCs. Fix all issues. ACKs for top commit: brunoerg: ACK 2ef5294 Tree-SHA512: 454782cf6a44fd0e05483bb152153667ef5c8021358385ddcf89724fbbbd35e187362bdff757e00c99319527bc4c0b20c7187f67241d4585d767a29787142f25
2 parents 7d258ee + 2ef5294 commit 46fcb52

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/rpc/blockchain.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,11 @@ static RPCHelpMan getblockfrompeer()
440440
},
441441
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
442442
{
443+
RPCTypeCheck(request.params, {
444+
UniValue::VSTR, // blockhash
445+
UniValue::VNUM, // peer_id
446+
});
447+
443448
const NodeContext& node = EnsureAnyNodeContext(request.context);
444449
ChainstateManager& chainman = EnsureChainman(node);
445450
PeerManager& peerman = EnsurePeerman(node);

test/functional/rpc_getblockfrompeer.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,17 @@ def run_test(self):
5454
assert_equal(len(peers), 1)
5555
peer_0_peer_1_id = peers[0]["id"]
5656

57-
self.log.info("Arguments must be sensible")
58-
assert_raises_rpc_error(-8, "hash must be of length 64 (not 4, for '1234')", self.nodes[0].getblockfrompeer, "1234", 0)
57+
self.log.info("Arguments must be valid")
58+
assert_raises_rpc_error(-8, "hash must be of length 64 (not 4, for '1234')", self.nodes[0].getblockfrompeer, "1234", peer_0_peer_1_id)
59+
assert_raises_rpc_error(-3, "Expected type string, got number", self.nodes[0].getblockfrompeer, 1234, peer_0_peer_1_id)
60+
assert_raises_rpc_error(-3, "Expected type number, got string", self.nodes[0].getblockfrompeer, short_tip, "0")
5961

6062
self.log.info("We must already have the header")
6163
assert_raises_rpc_error(-1, "Block header missing", self.nodes[0].getblockfrompeer, "00" * 32, 0)
6264

6365
self.log.info("Non-existent peer generates error")
64-
assert_raises_rpc_error(-1, "Peer does not exist", self.nodes[0].getblockfrompeer, short_tip, peer_0_peer_1_id + 1)
66+
for peer_id in [-1, peer_0_peer_1_id + 1]:
67+
assert_raises_rpc_error(-1, "Peer does not exist", self.nodes[0].getblockfrompeer, short_tip, peer_id)
6568

6669
self.log.info("Fetching from pre-segwit peer generates error")
6770
self.nodes[0].add_p2p_connection(P2PInterface(), services=P2P_SERVICES & ~NODE_WITNESS)

0 commit comments

Comments
 (0)