diff options
author | luigi1111 <luigi1111w@gmail.com> | 2020-04-04 13:01:15 -0500 |
---|---|---|
committer | luigi1111 <luigi1111w@gmail.com> | 2020-04-04 13:01:15 -0500 |
commit | 5757d992081fd650e241ae40a342d69d8fe9da61 (patch) | |
tree | 8b174dfefd1dabdc9e12c94927ea5580ef60cd46 /src/rpc/message.cpp | |
parent | Merge pull request #6357 (diff) | |
parent | Fixed bug in ZMQ JSON-RPC method field (diff) | |
download | monero-5757d992081fd650e241ae40a342d69d8fe9da61.tar.xz |
Merge pull request #6361
68a6507 Fixed bug in ZMQ JSON-RPC method field (vtnerd)
Diffstat (limited to 'src/rpc/message.cpp')
-rw-r--r-- | src/rpc/message.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/rpc/message.cpp b/src/rpc/message.cpp index a3df7fb56..5b6a1c05b 100644 --- a/src/rpc/message.cpp +++ b/src/rpc/message.cpp @@ -50,6 +50,16 @@ constexpr const char id_field[] = "id"; constexpr const char method_field[] = "method"; constexpr const char params_field[] = "params"; constexpr const char result_field[] = "result"; + +const rapidjson::Value& get_method_field(const rapidjson::Value& src) +{ + const auto member = src.FindMember(method_field); + if (member == src.MemberEnd()) + throw cryptonote::json::MISSING_KEY{method_field}; + if (!member->value.IsString()) + throw cryptonote::json::WRONG_TYPE{"Expected string"}; + return member->value; +} } void Message::toJson(rapidjson::Writer<rapidjson::StringBuffer>& dest) const @@ -81,7 +91,7 @@ FullMessage::FullMessage(const std::string& json_string, bool request) if (request) { - OBJECT_HAS_MEMBER_OR_THROW(doc, method_field) + get_method_field(doc); // throws on errors OBJECT_HAS_MEMBER_OR_THROW(doc, params_field) } else @@ -95,8 +105,7 @@ FullMessage::FullMessage(const std::string& json_string, bool request) std::string FullMessage::getRequestType() const { - OBJECT_HAS_MEMBER_OR_THROW(doc, method_field) - return doc[method_field].GetString(); + return get_method_field(doc).GetString(); } const rapidjson::Value& FullMessage::getMessage() const |