From ac0e4dec969bafd42814bd373f7d5b1ad8d23da5 Mon Sep 17 00:00:00 2001 From: Bronek Kozicki Date: Tue, 6 May 2025 19:57:15 +0100 Subject: [PATCH] Do not use isIntegral() --- src/test/app/Vault_test.cpp | 23 +++++++++++++++++++++++ src/xrpld/rpc/handlers/LedgerEntry.cpp | 3 ++- src/xrpld/rpc/handlers/VaultInfo.cpp | 2 +- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index f4bcba62ed..67cc3812df 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -2802,6 +2802,18 @@ class Vault_test : public beast::unit_test::suite "malformedRequest"); } + { + testcase("RPC ledger_entry bool seq"); + Json::Value jvParams; + jvParams[jss::ledger_index] = jss::validated; + jvParams[jss::vault][jss::owner] = issuer.human(); + jvParams[jss::vault][jss::seq] = true; + auto jvVault = env.rpc("json", "ledger_entry", to_string(jvParams)); + BEAST_EXPECT( + jvVault[jss::result][jss::error].asString() == + "malformedRequest"); + } + { testcase("RPC account_objects"); @@ -2933,6 +2945,17 @@ class Vault_test : public beast::unit_test::suite jv[jss::result][jss::error].asString() == "malformedRequest"); } + { + testcase("RPC vault_info json bool sequence"); + Json::Value jvParams; + jvParams[jss::ledger_index] = jss::validated; + jvParams[jss::owner] = owner.human(); + jvParams[jss::seq] = true; + auto jv = env.rpc("json", "vault_info", to_string(jvParams)); + BEAST_EXPECT( + jv[jss::result][jss::error].asString() == "malformedRequest"); + } + { testcase("RPC vault_info json malformed owner"); Json::Value jvParams; diff --git a/src/xrpld/rpc/handlers/LedgerEntry.cpp b/src/xrpld/rpc/handlers/LedgerEntry.cpp index f1fb6f81fc..f7788599a3 100644 --- a/src/xrpld/rpc/handlers/LedgerEntry.cpp +++ b/src/xrpld/rpc/handlers/LedgerEntry.cpp @@ -720,7 +720,8 @@ parseVault(Json::Value const& params, Json::Value& jvResult) } if (!params.isMember(jss::owner) || !params.isMember(jss::seq) || - !params[jss::seq].isIntegral() || params[jss::seq].asDouble() <= 0.0 || + !(params[jss::seq].isInt() || params[jss::seq].isUInt()) || + params[jss::seq].asDouble() <= 0.0 || params[jss::seq].asDouble() > double(Json::Value::maxUInt)) { jvResult[jss::error] = "malformedRequest"; diff --git a/src/xrpld/rpc/handlers/VaultInfo.cpp b/src/xrpld/rpc/handlers/VaultInfo.cpp index 244829149b..417bbd38e3 100644 --- a/src/xrpld/rpc/handlers/VaultInfo.cpp +++ b/src/xrpld/rpc/handlers/VaultInfo.cpp @@ -55,7 +55,7 @@ parseVault(Json::Value const& params, Json::Value& jvResult) return std::nullopt; } else if ( - !params[jss::seq].isIntegral() || + !(params[jss::seq].isInt() || params[jss::seq].isUInt()) || params[jss::seq].asDouble() <= 0.0 || params[jss::seq].asDouble() > double(Json::Value::maxUInt)) {