From d458e9972bee8f458a4c6b87705288ddf0a1daa1 Mon Sep 17 00:00:00 2001 From: Nathan Nichols Date: Wed, 13 Jul 2022 20:35:31 -0700 Subject: [PATCH] Improve JSON sanitization in reporting mode --- src/ripple/app/reporting/P2pProxy.cpp | 2 +- src/ripple/rpc/impl/ServerHandlerImp.cpp | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ripple/app/reporting/P2pProxy.cpp b/src/ripple/app/reporting/P2pProxy.cpp index 8e4fc3a97..ee04b68e6 100644 --- a/src/ripple/app/reporting/P2pProxy.cpp +++ b/src/ripple/app/reporting/P2pProxy.cpp @@ -72,7 +72,7 @@ shouldForwardToP2p(RPC::JsonContext& context) if (params.isMember(jss::ledger_index)) { auto indexValue = params[jss::ledger_index]; - if (!indexValue.isNumeric()) + if (indexValue.isString()) { auto index = indexValue.asString(); return index == "current" || index == "closed"; diff --git a/src/ripple/rpc/impl/ServerHandlerImp.cpp b/src/ripple/rpc/impl/ServerHandlerImp.cpp index 3ac5f04a9..cb70fdcab 100644 --- a/src/ripple/rpc/impl/ServerHandlerImp.cpp +++ b/src/ripple/rpc/impl/ServerHandlerImp.cpp @@ -873,9 +873,23 @@ ServerHandlerImp::processRequest( params, {user, forwardedFor}}; Json::Value result; + auto start = std::chrono::system_clock::now(); - RPC::doCommand(context, result); + + try + { + RPC::doCommand(context, result); + } + catch (std::exception const& ex) + { + result = RPC::make_error(rpcINTERNAL); + JLOG(m_journal.error()) << "Internal error : " << ex.what() + << " when processing request: " + << Json::Compact{Json::Value{params}}; + } + auto end = std::chrono::system_clock::now(); + logDuration(params, end - start, m_journal); usage.charge(loadType);