mirror of
https://github.com/XRPLF/rippled.git
synced 2026-07-28 17:40:25 +00:00
fix: Additional RPC validation checks on ammRpcInfo account and amm_account fields. (#7324)
This commit is contained in:
@@ -174,12 +174,22 @@ public:
|
||||
ammRpcInfo(
|
||||
std::optional<AccountID> const& account = std::nullopt,
|
||||
std::optional<std::string> const& ledgerIndex = std::nullopt,
|
||||
std::optional<Asset> asset1 = std::nullopt,
|
||||
std::optional<Asset> asset2 = std::nullopt,
|
||||
std::optional<Asset> const& asset1 = std::nullopt,
|
||||
std::optional<Asset> const& asset2 = std::nullopt,
|
||||
std::optional<AccountID> const& ammAccount = std::nullopt,
|
||||
bool ignoreParams = false,
|
||||
unsigned apiVersion = RPC::kApiInvalidVersion) const;
|
||||
|
||||
[[nodiscard]] json::Value
|
||||
ammRpcInfo(
|
||||
std::optional<json::Value> const& account,
|
||||
std::optional<std::string> const& ledgerIndex,
|
||||
std::optional<Asset> const& asset1,
|
||||
std::optional<Asset> const& asset2,
|
||||
std::optional<json::Value> const& ammAccount,
|
||||
bool ignoreParams,
|
||||
unsigned apiVersion) const;
|
||||
|
||||
/** Verify the AMM balances.
|
||||
*/
|
||||
[[nodiscard]] bool
|
||||
|
||||
@@ -183,15 +183,37 @@ json::Value
|
||||
AMM::ammRpcInfo(
|
||||
std::optional<AccountID> const& account,
|
||||
std::optional<std::string> const& ledgerIndex,
|
||||
std::optional<Asset> asset1,
|
||||
std::optional<Asset> asset2,
|
||||
std::optional<Asset> const& asset1,
|
||||
std::optional<Asset> const& asset2,
|
||||
std::optional<AccountID> const& ammAccount,
|
||||
bool ignoreParams,
|
||||
unsigned apiVersion) const
|
||||
{
|
||||
auto const toJson = [](AccountID const& a) { return json::Value{to_string(a)}; };
|
||||
|
||||
return ammRpcInfo(
|
||||
account.transform(toJson),
|
||||
ledgerIndex,
|
||||
asset1,
|
||||
asset2,
|
||||
ammAccount.transform(toJson),
|
||||
ignoreParams,
|
||||
apiVersion);
|
||||
}
|
||||
|
||||
json::Value
|
||||
AMM::ammRpcInfo(
|
||||
std::optional<json::Value> const& account,
|
||||
std::optional<std::string> const& ledgerIndex,
|
||||
std::optional<Asset> const& asset1,
|
||||
std::optional<Asset> const& asset2,
|
||||
std::optional<json::Value> const& ammAccount,
|
||||
bool ignoreParams,
|
||||
unsigned apiVersion) const
|
||||
{
|
||||
json::Value jv;
|
||||
if (account)
|
||||
jv[jss::account] = to_string(*account);
|
||||
jv[jss::account] = *account;
|
||||
if (ledgerIndex)
|
||||
jv[jss::ledger_index] = *ledgerIndex;
|
||||
if (!ignoreParams)
|
||||
@@ -209,7 +231,7 @@ AMM::ammRpcInfo(
|
||||
jv[jss::asset2] = STIssue(sfAsset2, asset2_.asset()).getJson(JsonOptions::Values::None);
|
||||
}
|
||||
if (ammAccount)
|
||||
jv[jss::amm_account] = to_string(*ammAccount);
|
||||
jv[jss::amm_account] = *ammAccount;
|
||||
}
|
||||
auto jr =
|
||||
(apiVersion == RPC::kApiInvalidVersion
|
||||
|
||||
@@ -65,6 +65,26 @@ public:
|
||||
BEAST_EXPECT(jv[jss::error_message] == "Account malformed.");
|
||||
});
|
||||
|
||||
// Account is not a string
|
||||
testAMM([&](AMM& ammAlice, Env&) {
|
||||
auto const jv =
|
||||
ammAlice.ammRpcInfo(json::Value{42}, std::nullopt, XRP, USD, std::nullopt, true, 3);
|
||||
BEAST_EXPECT(jv[jss::error_message] == "Account malformed.");
|
||||
});
|
||||
|
||||
// AMM Account is not a string
|
||||
testAMM([&](AMM& ammAlice, Env&) {
|
||||
auto const jv = ammAlice.ammRpcInfo(
|
||||
json::Value{to_string(ammAlice.ammAccount())},
|
||||
std::nullopt,
|
||||
XRP,
|
||||
USD,
|
||||
json::Value{42},
|
||||
false,
|
||||
3);
|
||||
BEAST_EXPECT(jv[jss::error_message] == "Account malformed.");
|
||||
});
|
||||
|
||||
std::vector<std::tuple<std::optional<Issue>, std::optional<Issue>, TestAccount, bool>> const
|
||||
invalidParams = {
|
||||
{xrpIssue(), std::nullopt, TestAccount::None, false},
|
||||
|
||||
Reference in New Issue
Block a user