diff options
author | João Barbosa <joao@uphold.com> | 2016-03-30 00:59:29 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2016-04-15 14:55:52 +0200 |
commit | 41e835dd50d358c127bab17a1f2872471dbdfe9c (patch) | |
tree | 264580e003adcc38decf0ad0e8f0f1c8634431eb | |
parent | a4ca44d2766ab0e5f67f7b24bfa95ed0b80c7322 (diff) |
Add strict flag to RPCTypeCheckObj
Strict flag forces type check on all object keys.
-rw-r--r-- | src/rpc/server.cpp | 15 | ||||
-rw-r--r-- | src/rpc/server.h | 2 |
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 |