From a3d4be4eafce09c8a26fa81489fd59d4fd4a4b97 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 20 Nov 2025 17:07:28 +0530 Subject: [PATCH] fix: Set correct index for limit in `book_offers` CLI (#6043) This change fixes an indexing typo in the `book_offers` CLI processing, and does not affect the HTTPS/WS RPC processing. --- src/test/rpc/RPCCall_test.cpp | 23 +++++++++++++---------- src/xrpld/rpc/detail/RPCCall.cpp | 26 +++++++++++++++++++++----- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/test/rpc/RPCCall_test.cpp b/src/test/rpc/RPCCall_test.cpp index 07129e4bae..7647dc5f65 100644 --- a/src/test/rpc/RPCCall_test.cpp +++ b/src/test/rpc/RPCCall_test.cpp @@ -1584,8 +1584,6 @@ static RPCCallTestData const rpcCallTestArray[] = { "EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789", - "junk", // Note: indexing bug in parseBookOffers() requires junk - // param. "200", }, RPCCallTestData::no_exception, @@ -1597,7 +1595,6 @@ static RPCCallTestData const rpcCallTestArray[] = { "issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789", "limit" : 200, - "proof" : true, "taker_gets" : { "currency" : "EUR", "issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA" @@ -1617,8 +1614,8 @@ static RPCCallTestData const rpcCallTestArray[] = { "EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789", - "junk", // Note: indexing bug in parseBookOffers() requires junk param. "200", + "0", "MyMarker"}, RPCCallTestData::no_exception, R"({ @@ -1630,7 +1627,6 @@ static RPCCallTestData const rpcCallTestArray[] = { "ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789", "limit" : 200, "marker" : "MyMarker", - "proof" : true, "taker_gets" : { "currency" : "EUR", "issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA" @@ -1665,8 +1661,8 @@ static RPCCallTestData const rpcCallTestArray[] = { "EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789", - "junk", // Note: indexing bug in parseBookOffers() requires junk param. "200", + "0", "MyMarker", "extra"}, RPCCallTestData::no_exception, @@ -1770,12 +1766,19 @@ static RPCCallTestData const rpcCallTestArray[] = { "EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA", "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789", - "junk", // Note: indexing bug in parseBookOffers() requires junk - // param. "not_a_number", }, - RPCCallTestData::bad_cast, - R"()"}, + RPCCallTestData::no_exception, + R"({ + "method" : "book_offers", + "params" : [ + { + "error" : "invalidParams", + "error_code" : 31, + "error_message" : "Invalid field 'limit'." + } + ] + })"}, // can_delete // ------------------------------------------------------------------ diff --git a/src/xrpld/rpc/detail/RPCCall.cpp b/src/xrpld/rpc/detail/RPCCall.cpp index 915f951749..185043302a 100644 --- a/src/xrpld/rpc/detail/RPCCall.cpp +++ b/src/xrpld/rpc/detail/RPCCall.cpp @@ -332,15 +332,31 @@ private: if (jvParams.size() >= 5) { - int iLimit = jvParams[5u].asInt(); + try + { + int iLimit = jvParams[4u].asInt(); - if (iLimit > 0) - jvRequest[jss::limit] = iLimit; + if (iLimit > 0) + jvRequest[jss::limit] = iLimit; + } + catch (std::exception const&) + { + return RPC::invalid_field_error(jss::limit); + } } - if (jvParams.size() >= 6 && jvParams[5u].asInt()) + if (jvParams.size() >= 6) { - jvRequest[jss::proof] = true; + try + { + int bProof = jvParams[5u].asInt(); + if (bProof) + jvRequest[jss::proof] = true; + } + catch (std::exception const&) + { + return RPC::invalid_field_error(jss::proof); + } } if (jvParams.size() == 7)