mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-21 14:34:49 +01:00
bitcoin-cli: Make it an error to specify the "args" parameter two different ways
MarcoFalke reported the case of positional arguments silently overwriting the named "args" parameter in bitcoin-cli https://github.com/bitcoin/bitcoin/pull/19762#discussion_r1035761471 and this behavior is confusing and was not intended when support for "args" parameters was added to bitcoin-cli in #19762. Instead of letting one "args" value overwrite the other in the client, just pass the values to the server verbatim, and let the error be handled server side.
This commit is contained in:
parent
6bd1d20b8c
commit
d1ca563825
2 changed files with 8 additions and 2 deletions
|
@ -289,6 +289,9 @@ UniValue RPCConvertNamedValues(const std::string &strMethod, const std::vector<s
|
|||
std::string name = s.substr(0, pos);
|
||||
std::string value = s.substr(pos+1);
|
||||
|
||||
// Intentionally overwrite earlier named values with later ones as a
|
||||
// convenience for scripts and command line users that want to merge
|
||||
// options.
|
||||
if (!rpcCvtTable.convert(strMethod, name)) {
|
||||
// insert string value directly
|
||||
params.pushKV(name, value);
|
||||
|
@ -299,7 +302,10 @@ UniValue RPCConvertNamedValues(const std::string &strMethod, const std::vector<s
|
|||
}
|
||||
|
||||
if (!positional_args.empty()) {
|
||||
params.pushKV("args", positional_args);
|
||||
// Use __pushKV instead of pushKV to avoid overwriting an explicit
|
||||
// "args" value with an implicit one. Let the RPC server handle the
|
||||
// request as given.
|
||||
params.__pushKV("args", positional_args);
|
||||
}
|
||||
|
||||
return params;
|
||||
|
|
|
@ -92,7 +92,7 @@ class TestBitcoinCli(BitcoinTestFramework):
|
|||
|
||||
self.log.info("Test that later cli named arguments values silently overwrite earlier ones")
|
||||
assert_equal(self.nodes[0].cli("-named", "echo", "arg0=0", "arg1=1", "arg2=2", "arg1=3").send_cli(), ['0', '3', '2'])
|
||||
assert_equal(self.nodes[0].cli("-named", "echo", "args=[0,1,2,3]", "4", "5", "6", ).send_cli(), ['4', '5', '6'])
|
||||
assert_raises_rpc_error(-8, "Parameter args specified multiple times", self.nodes[0].cli("-named", "echo", "args=[0,1,2,3]", "4", "5", "6", ).send_cli)
|
||||
|
||||
user, password = get_auth_cookie(self.nodes[0].datadir, self.chain)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue