aboutsummaryrefslogtreecommitdiff
path: root/src/rpc/server.cpp
diff options
context:
space:
mode:
authorBen Woosley <[email protected]>2018-06-08 11:16:07 -0700
committerBen Woosley <[email protected]>2018-08-07 12:47:39 -0400
commit5eb20f81d9568284dca735e4f770f41a48aa5660 (patch)
treeb0cddba3e535af76c852d57816d84f5335b15a6d /src/rpc/server.cpp
parentMerge #13374: utils and libraries: checking for bitcoin address in translations (diff)
downloaddiscoin-5eb20f81d9568284dca735e4f770f41a48aa5660.tar.xz
discoin-5eb20f81d9568284dca735e4f770f41a48aa5660.zip
Consistently use ParseHashV to validate hash inputs in rpc
ParseHashV validates the length and encoding of the string and throws an informative RPC error on failure, which is as good or better than these alternative calls. Note I switched ParseHashV to check string length first, because IsHex tests that the length is even, and an error like: "must be of length 64 (not 63, for X)" is much more informative than "must be hexadecimal string (not X)"
Diffstat (limited to 'src/rpc/server.cpp')
-rw-r--r--src/rpc/server.cpp12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp
index 10040b125..85383eb3b 100644
--- a/src/rpc/server.cpp
+++ b/src/rpc/server.cpp
@@ -117,16 +117,12 @@ CAmount AmountFromValue(const UniValue& value)
uint256 ParseHashV(const UniValue& v, std::string strName)
{
- std::string strHex;
- if (v.isStr())
- strHex = v.get_str();
+ std::string strHex(v.get_str());
+ if (64 != strHex.length())
+ throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("%s must be of length %d (not %d, for '%s')", strName, 64, strHex.length(), strHex));
if (!IsHex(strHex)) // Note: IsHex("") is false
throw JSONRPCError(RPC_INVALID_PARAMETER, strName+" must be hexadecimal string (not '"+strHex+"')");
- if (64 != strHex.length())
- throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("%s must be of length %d (not %d)", strName, 64, strHex.length()));
- uint256 result;
- result.SetHex(strHex);
- return result;
+ return uint256S(strHex);
}
uint256 ParseHashO(const UniValue& o, std::string strKey)
{