From 7aaba1cbadb8f06f8d0873407e3725699d995cf5 Mon Sep 17 00:00:00 2001 From: cyan317 <120398799+cindyyan317@users.noreply.github.com> Date: Wed, 11 Sep 2024 14:42:25 +0100 Subject: [PATCH] fix: no restriction on type field (#1644) 'type' should not matter if 'full' or 'accounts' is false. Relax the restriction for 'type' --- src/rpc/RPCHelpers.cpp | 6 +++++- tests/unit/rpc/RPCHelpersTests.cpp | 17 ++--------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/rpc/RPCHelpers.cpp b/src/rpc/RPCHelpers.cpp index 8dae9f22..d1f8b5bc 100644 --- a/src/rpc/RPCHelpers.cpp +++ b/src/rpc/RPCHelpers.cpp @@ -1287,7 +1287,11 @@ isAdminCmd(std::string const& method, boost::json::object const& request) // https://github.com/XRPLF/rippled/issues/5119 auto const isFieldSet = [&jv](auto const field) { return jv.isMember(field) and jv[field].asBool(); }; - if (isFieldSet(JS(full)) or isFieldSet(JS(accounts)) or isFieldSet(JS(type))) + // According to doc + // https://xrpl.org/docs/references/http-websocket-apis/public-api-methods/ledger-methods/ledger, + // full/accounts/type are admin only, but type only works when full/accounts are set, so we don't need to check + // type. + if (isFieldSet(JS(full)) or isFieldSet(JS(accounts))) return true; } diff --git a/tests/unit/rpc/RPCHelpersTests.cpp b/tests/unit/rpc/RPCHelpersTests.cpp index c367e65e..faaffb30 100644 --- a/tests/unit/rpc/RPCHelpersTests.cpp +++ b/tests/unit/rpc/RPCHelpersTests.cpp @@ -561,6 +561,7 @@ generateTestValuesForParametersTest() {"featureVetoedIsStr", "feature", R"({"vetoed": "String"})", true}, {"ledger", "ledger", R"({})", false}, + {"ledgerWithType", "ledger", R"({"type": "fee"})", false}, {"ledgerFullTrue", "ledger", R"({"full": true})", true}, {"ledgerFullFalse", "ledger", R"({"full": false})", false}, {"ledgerFullIsStr", "ledger", R"({"full": "String"})", true}, @@ -575,25 +576,11 @@ generateTestValuesForParametersTest() {"ledgerFullIsObject", "ledger", R"({"full": {"key": 1}})", true}, {"ledgerFullIsEmptyObject", "ledger", R"({"full": {}})", false}, - {"ledgerTypeTrue", "ledger", R"({"type": true})", true}, - {"ledgerTypeFalse", "ledger", R"({"type": false})", false}, - {"ledgerTypeIsStr", "ledger", R"({"type": "String"})", true}, - {"ledgerTypeIsEmptyStr", "ledger", R"({"type": ""})", false}, - {"ledgerTypeIsNumber1", "ledger", R"({"type": 1})", true}, - {"ledgerTypeIsNumber0", "ledger", R"({"type": 0})", false}, - {"ledgerTypeIsNull", "ledger", R"({"type": null})", false}, - {"ledgerTypeIsFloat0", "ledger", R"({"type": 0.0})", false}, - {"ledgerTypeIsFloat1", "ledger", R"({"type": 0.1})", true}, - {"ledgerTypeIsArray", "ledger", R"({"type": [1]})", true}, - {"ledgerTypeIsEmptyArray", "ledger", R"({"type": []})", false}, - {"ledgerTypeIsObject", "ledger", R"({"type": {"key": 1}})", true}, - {"ledgerTypeIsEmptyObject", "ledger", R"({"type": {}})", false}, - {"ledgerAccountsTrue", "ledger", R"({"accounts": true})", true}, {"ledgerAccountsFalse", "ledger", R"({"accounts": false})", false}, {"ledgerAccountsIsStr", "ledger", R"({"accounts": "String"})", true}, {"ledgerAccountsIsEmptyStr", "ledger", R"({"accounts": ""})", false}, - {"ledgerAccountsIsNumber1", "ledger", R"({"type": 1})", true}, + {"ledgerAccountsIsNumber1", "ledger", R"({"accounts": 1})", true}, {"ledgerAccountsIsNumber0", "ledger", R"({"accounts": 0})", false}, {"ledgerAccountsIsNull", "ledger", R"({"accounts": null})", false}, {"ledgerAccountsIsFloat0", "ledger", R"({"accounts": 0.0})", false},