Skip to content

Commit

Permalink
Modify the way parsing marker string
Browse files Browse the repository at this point in the history
  • Loading branch information
yinyiqian1 committed Oct 14, 2024
1 parent 029c474 commit 3e63249
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
6 changes: 4 additions & 2 deletions src/test/rpc/AccountObjects_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1257,12 +1257,14 @@ class AccountObjects_test : public beast::unit_test::suite
BEAST_EXPECT(accountObjects.size() == limit);
}

// test invalid marker "\0"
// test invalid marker by adding invalid string after the maker.
{
std::string s = marker.asString();
s.append(",1234");
Json::Value params;
params[jss::account] = bob.human();
params[jss::limit] = limit;
params[jss::marker] = "\0";
params[jss::marker] = s;
params[jss::ledger_index] = "validated";
auto resp = env.rpc("json", "account_objects", to_string(params));
BEAST_EXPECT(
Expand Down
13 changes: 5 additions & 8 deletions src/xrpld/rpc/handlers/AccountObjects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,18 +268,15 @@ doAccountObjects(RPC::JsonContext& context)
if (!marker.isString())
return RPC::expected_field_error(jss::marker, "string");

std::stringstream ss(marker.asString());
std::string s;
if (!std::getline(ss, s, ','))
auto const& markerStr = marker.asString();
auto const& idx = markerStr.find(',');
if (idx == std::string::npos)
return RPC::invalid_field_error(jss::marker);

if (!dirIndex.parseHex(s))
if (!dirIndex.parseHex(markerStr.substr(0, idx)))
return RPC::invalid_field_error(jss::marker);

if (!std::getline(ss, s, ','))
return RPC::invalid_field_error(jss::marker);

if (!entryIndex.parseHex(s))
if (!entryIndex.parseHex(markerStr.substr(idx + 1)))
return RPC::invalid_field_error(jss::marker);
}

Expand Down

0 comments on commit 3e63249

Please sign in to comment.