Skip to content

Commit

Permalink
fix: change error for invalid feature param in feature RPC (#5063)
Browse files Browse the repository at this point in the history
* Returns an "Invalid parameters" error if the `feature` parameter is provided and is not a string.
  • Loading branch information
mvadari authored Jul 30, 2024
1 parent 2820feb commit a39720e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
25 changes: 22 additions & 3 deletions src/test/rpc/Feature_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,28 @@ class Feature_test : public beast::unit_test::suite
using namespace test::jtx;
Env env{*this};

auto jrr = env.rpc("feature", "AllTheThings")[jss::result];
BEAST_EXPECT(jrr[jss::error] == "badFeature");
BEAST_EXPECT(jrr[jss::error_message] == "Feature unknown or invalid.");
auto testInvalidParam = [&](auto const& param) {
Json::Value params;
params[jss::feature] = param;
auto jrr =
env.rpc("json", "feature", to_string(params))[jss::result];
BEAST_EXPECT(jrr[jss::error] == "invalidParams");
BEAST_EXPECT(jrr[jss::error_message] == "Invalid parameters.");
};

testInvalidParam(1);
testInvalidParam(1.1);
testInvalidParam(true);
testInvalidParam(Json::Value(Json::nullValue));
testInvalidParam(Json::Value(Json::objectValue));
testInvalidParam(Json::Value(Json::arrayValue));

{
auto jrr = env.rpc("feature", "AllTheThings")[jss::result];
BEAST_EXPECT(jrr[jss::error] == "badFeature");
BEAST_EXPECT(
jrr[jss::error_message] == "Feature unknown or invalid.");
}
}

void
Expand Down
9 changes: 9 additions & 0 deletions src/xrpld/rpc/handlers/Feature1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ doFeature(RPC::JsonContext& context)
if (context.app.config().reporting())
return rpcError(rpcREPORTING_UNSUPPORTED);

if (context.params.isMember(jss::feature))
{
// ensure that the `feature` param is a string
if (!context.params[jss::feature].isString())
{
return rpcError(rpcINVALID_PARAMS);
}
}

bool const isAdmin = context.role == Role::ADMIN;
// Get majority amendment status
majorityAmendments_t majorities;
Expand Down

0 comments on commit a39720e

Please sign in to comment.