aboutsummaryrefslogtreecommitdiff
path: root/src/rpc
diff options
context:
space:
mode:
authorJoão Barbosa <joao@uphold.com>2016-03-30 00:59:29 +0100
committerWladimir J. van der Laan <laanwj@gmail.com>2016-04-15 14:55:52 +0200
commit41e835dd50d358c127bab17a1f2872471dbdfe9c (patch)
tree264580e003adcc38decf0ad0e8f0f1c8634431eb /src/rpc
parenta4ca44d2766ab0e5f67f7b24bfa95ed0b80c7322 (diff)
Add strict flag to RPCTypeCheckObj
Strict flag forces type check on all object keys.
Diffstat (limited to 'src/rpc')
-rw-r--r--src/rpc/server.cpp15
-rw-r--r--src/rpc/server.h2
2 files changed, 15 insertions, 2 deletions
diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp
index 8326fe14d2..d06a9142b6 100644
--- a/src/rpc/server.cpp
+++ b/src/rpc/server.cpp
@@ -89,7 +89,8 @@ void RPCTypeCheck(const UniValue& params,
void RPCTypeCheckObj(const UniValue& o,
const map<string, UniValue::VType>& typesExpected,
- bool fAllowNull)
+ bool fAllowNull,
+ bool fStrict)
{
BOOST_FOREACH(const PAIRTYPE(string, UniValue::VType)& t, typesExpected)
{
@@ -104,6 +105,18 @@ void RPCTypeCheckObj(const UniValue& o,
throw JSONRPCError(RPC_TYPE_ERROR, err);
}
}
+
+ if (fStrict)
+ {
+ BOOST_FOREACH(const string& k, o.getKeys())
+ {
+ if (typesExpected.count(k) == 0)
+ {
+ string err = strprintf("Unexpected key %s", k);
+ throw JSONRPCError(RPC_TYPE_ERROR, err);
+ }
+ }
+ }
}
CAmount AmountFromValue(const UniValue& value)
diff --git a/src/rpc/server.h b/src/rpc/server.h
index a7ed710ce6..b471336617 100644
--- a/src/rpc/server.h
+++ b/src/rpc/server.h
@@ -70,7 +70,7 @@ void RPCTypeCheck(const UniValue& params,
Use like: RPCTypeCheckObj(object, boost::assign::map_list_of("name", str_type)("value", int_type));
*/
void RPCTypeCheckObj(const UniValue& o,
- const std::map<std::string, UniValue::VType>& typesExpected, bool fAllowNull=false);
+ const std::map<std::string, UniValue::VType>& typesExpected, bool fAllowNull=false, bool fStrict=false);
/** Opaque base class for timers returned by NewTimerFunc.
* This provides no methods at the moment, but makes sure that delete