Return srcCurMalformed on invalid taker_pays in book_offers (#413)

Fixes #267
This commit is contained in:
Alex Kremer
2022-11-30 15:51:09 +00:00
committed by GitHub
parent 1369eaeef6
commit b0f678411c
2 changed files with 25 additions and 21 deletions

View File

@@ -1 +1,6 @@
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wno-narrowing -Wno-dangling-else -Wno-deprecated-declarations") target_compile_options(clio
PUBLIC -Wall
-Werror
-Wno-narrowing
-Wno-deprecated-declarations
-Wno-dangling-else)

View File

@@ -1317,46 +1317,48 @@ std::variant<Status, ripple::Book>
parseBook(boost::json::object const& request) parseBook(boost::json::object const& request)
{ {
if (!request.contains("taker_pays")) if (!request.contains("taker_pays"))
return Status{RippledError::rpcBAD_MARKET, "missingTakerPays"}; return Status{
RippledError::rpcINVALID_PARAMS, "Missing field 'taker_pays'"};
if (!request.contains("taker_gets")) if (!request.contains("taker_gets"))
return Status{RippledError::rpcINVALID_PARAMS, "missingTakerGets"}; return Status{
RippledError::rpcINVALID_PARAMS, "Missing field 'taker_gets'"};
if (!request.at("taker_pays").is_object()) if (!request.at("taker_pays").is_object())
return Status{RippledError::rpcINVALID_PARAMS, "takerPaysNotObject"}; return Status{
RippledError::rpcINVALID_PARAMS,
"Field 'taker_pays' is not an object"};
if (!request.at("taker_gets").is_object()) if (!request.at("taker_gets").is_object())
return Status{RippledError::rpcINVALID_PARAMS, "takerGetsNotObject"}; return Status{
RippledError::rpcINVALID_PARAMS,
"Field 'taker_gets' is not an object"};
auto taker_pays = request.at("taker_pays").as_object(); auto taker_pays = request.at("taker_pays").as_object();
if (!taker_pays.contains("currency")) if (!taker_pays.contains("currency"))
return Status{ return Status{RippledError::rpcSRC_CUR_MALFORMED};
RippledError::rpcINVALID_PARAMS, "missingTakerPaysCurrency"};
if (!taker_pays.at("currency").is_string()) if (!taker_pays.at("currency").is_string())
return Status{ return Status{RippledError::rpcSRC_CUR_MALFORMED};
RippledError::rpcINVALID_PARAMS, "takerPaysCurrencyNotString"};
auto taker_gets = request.at("taker_gets").as_object(); auto taker_gets = request.at("taker_gets").as_object();
if (!taker_gets.contains("currency")) if (!taker_gets.contains("currency"))
return Status{ return Status{RippledError::rpcDST_AMT_MALFORMED};
RippledError::rpcINVALID_PARAMS, "missingTakerGetsCurrency"};
if (!taker_gets.at("currency").is_string()) if (!taker_gets.at("currency").is_string())
return Status{ return Status{
RippledError::rpcINVALID_PARAMS, "takerGetsCurrencyNotString"}; RippledError::rpcDST_AMT_MALFORMED,
};
ripple::Currency pay_currency; ripple::Currency pay_currency;
if (!ripple::to_currency( if (!ripple::to_currency(
pay_currency, taker_pays.at("currency").as_string().c_str())) pay_currency, taker_pays.at("currency").as_string().c_str()))
return Status{ return Status{RippledError::rpcSRC_CUR_MALFORMED};
RippledError::rpcSRC_CUR_MALFORMED, "badTakerPaysCurrency"};
ripple::Currency get_currency; ripple::Currency get_currency;
if (!ripple::to_currency( if (!ripple::to_currency(
get_currency, taker_gets["currency"].as_string().c_str())) get_currency, taker_gets["currency"].as_string().c_str()))
return Status{ return Status{RippledError::rpcDST_AMT_MALFORMED};
RippledError::rpcDST_AMT_MALFORMED, "badTakerGetsCurrency"};
ripple::AccountID pay_issuer; ripple::AccountID pay_issuer;
if (taker_pays.contains("issuer")) if (taker_pays.contains("issuer"))
@@ -1367,13 +1369,10 @@ parseBook(boost::json::object const& request)
if (!ripple::to_issuer( if (!ripple::to_issuer(
pay_issuer, taker_pays.at("issuer").as_string().c_str())) pay_issuer, taker_pays.at("issuer").as_string().c_str()))
return Status{ return Status{RippledError::rpcSRC_ISR_MALFORMED};
RippledError::rpcSRC_ISR_MALFORMED, "badTakerPaysIssuer"};
if (pay_issuer == ripple::noAccount()) if (pay_issuer == ripple::noAccount())
return Status{ return Status{RippledError::rpcSRC_ISR_MALFORMED};
RippledError::rpcSRC_ISR_MALFORMED,
"badTakerPaysIssuerAccountOne"};
} }
else else
{ {