Skip to content

Commit

Permalink
Merge bitcoin#28123: Bugfix: RPC: Remove quotes from non-string oneli…
Browse files Browse the repository at this point in the history
…ne descriptions

5e3e83b RPC/Mining: Document template_request better for getblocktemplate (Luke Dashjr)
de319c6 RPC/rpcdoccheck: Error if a oneline_description has a quote for a non-string (Luke Dashjr)
7c61e9d Bugfix: RPC: Remove quotes from non-string oneline descriptions (Luke Dashjr)

Pull request description:

  Various JSON Object parameters had a `oneline_description` with quote characters. Fix those, and extend `rpcdoccheck` to detect them.

  Also, slightly improve GBT's oneline description for template_request.

ACKs for top commit:
  MarcoFalke:
    review ACK 5e3e83b

Tree-SHA512: 363d1669a661d0acfc19fddb57e777d781c7246f330cf62160e77dde10a6adcb0249db748127067da1afe1b7d17c71cf611d9fdc3664d6bf5b3f30105637769a
  • Loading branch information
fanquake committed Aug 17, 2023
2 parents 6d473ba + 5e3e83b commit ecb2056
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/rpc/blockchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2312,7 +2312,7 @@ static RPCHelpMan scanblocks()
{
{"filter_false_positives", RPCArg::Type::BOOL, RPCArg::Default{false}, "Filter false positives (slower and may fail on pruned nodes). Otherwise they may occur at a rate of 1/M"},
},
RPCArgOptions{.oneline_description="\"options\""}},
RPCArgOptions{.oneline_description="options"}},
},
{
scan_result_status_none,
Expand Down
4 changes: 2 additions & 2 deletions src/rpc/mining.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ static RPCHelpMan getblocktemplate()
" https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki#getblocktemplate_changes\n"
" https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki\n",
{
{"template_request", RPCArg::Type::OBJ, RPCArg::Default{UniValue::VOBJ}, "Format of the template",
{"template_request", RPCArg::Type::OBJ, RPCArg::Optional::NO, "Format of the template",
{
{"mode", RPCArg::Type::STR, /* treat as named arg */ RPCArg::Optional::OMITTED, "This must be set to \"template\", \"proposal\" (see BIP 23), or omitted"},
{"capabilities", RPCArg::Type::ARR, /* treat as named arg */ RPCArg::Optional::OMITTED, "A list of strings",
Expand All @@ -569,7 +569,7 @@ static RPCHelpMan getblocktemplate()
{"longpollid", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "delay processing request until the result would vary significantly from the \"longpollid\" of a prior template"},
{"data", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "proposed block data to check, encoded in hexadecimal; valid only for mode=\"proposal\""},
},
RPCArgOptions{.oneline_description="\"template_request\""}},
},
},
{
RPCResult{"If the proposal was accepted with mode=='proposal'", RPCResult::Type::NONE, "", ""},
Expand Down
11 changes: 10 additions & 1 deletion src/rpc/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1138,7 +1138,16 @@ std::string RPCArg::ToStringObj(const bool oneline) const

std::string RPCArg::ToString(const bool oneline) const
{
if (oneline && !m_opts.oneline_description.empty()) return m_opts.oneline_description;
if (oneline && !m_opts.oneline_description.empty()) {
if (m_opts.oneline_description[0] == '\"' && m_type != Type::STR_HEX && m_type != Type::STR && gArgs.GetBoolArg("-rpcdoccheck", DEFAULT_RPC_DOC_CHECK)) {
throw std::runtime_error{
strprintf("Internal bug detected: non-string RPC arg \"%s\" quotes oneline_description:\n%s\n%s %s\nPlease report this issue here: %s\n",
m_names, m_opts.oneline_description,
PACKAGE_NAME, FormatFullVersion(),
PACKAGE_BUGREPORT)};
}
return m_opts.oneline_description;
}

switch (m_type) {
case Type::STR_HEX:
Expand Down
6 changes: 3 additions & 3 deletions src/wallet/rpc/backup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1297,12 +1297,12 @@ RPCHelpMan importmulti()
},
},
},
RPCArgOptions{.oneline_description="\"requests\""}},
RPCArgOptions{.oneline_description="requests"}},
{"options", RPCArg::Type::OBJ_NAMED_PARAMS, RPCArg::Optional::OMITTED, "",
{
{"rescan", RPCArg::Type::BOOL, RPCArg::Default{true}, "Scan the chain and mempool for wallet transactions after all imports."},
},
RPCArgOptions{.oneline_description="\"options\""}},
RPCArgOptions{.oneline_description="options"}},
},
RPCResult{
RPCResult::Type::ARR, "", "Response is an array with the same size as the input that has the execution result",
Expand Down Expand Up @@ -1617,7 +1617,7 @@ RPCHelpMan importdescriptors()
},
},
},
RPCArgOptions{.oneline_description="\"requests\""}},
RPCArgOptions{.oneline_description="requests"}},
},
RPCResult{
RPCResult::Type::ARR, "", "Response is an array with the same size as the input that has the execution result",
Expand Down
2 changes: 1 addition & 1 deletion test/functional/mining_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ def assert_submitblock(block, result_str_1, result_str_2=None):
block.vtx = [coinbase_tx]

self.log.info("getblocktemplate: segwit rule must be set")
assert_raises_rpc_error(-8, "getblocktemplate must be called with the segwit rule set", node.getblocktemplate)
assert_raises_rpc_error(-8, "getblocktemplate must be called with the segwit rule set", node.getblocktemplate, {})

self.log.info("getblocktemplate: Test valid block")
assert_template(node, block, None)
Expand Down

0 comments on commit ecb2056

Please sign in to comment.