mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
fix: accept all valid currency codes in API (#4566)
A few methods, including `book_offers`, take currency codes as parameters. The XRPL doesn't care if the letters in those codes are lowercase or uppercase, as long as they come from an alphabet defined internally. rippled doesn't care either, when they are submitted in a hex representation. When they are submitted in an ASCII string representation, rippled, but not XRPL, is more restrictive, preventing clients from interacting with some currencies already in the XRPL. This change gets rippled out of the way and lets clients submit currency codes in ASCII using the full alphabet. Fixes #4112
This commit is contained in:
@@ -121,7 +121,13 @@ private:
|
||||
static Json::Value
|
||||
jvParseCurrencyIssuer(std::string const& strCurrencyIssuer)
|
||||
{
|
||||
static boost::regex reCurIss("\\`([[:alpha:]]{3})(?:/(.+))?\\'");
|
||||
// Matches a sequence of 3 characters from
|
||||
// `ripple::detail::isoCharSet` (the currency),
|
||||
// optionally followed by a forward slash and some other characters
|
||||
// (the issuer).
|
||||
// https://www.boost.org/doc/libs/1_82_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html
|
||||
static boost::regex reCurIss(
|
||||
"\\`([][:alnum:]<>(){}[|?!@#$%^&*]{3})(?:/(.+))?\\'");
|
||||
|
||||
boost::smatch smMatch;
|
||||
|
||||
|
||||
@@ -93,14 +93,8 @@ to_currency(Currency& currency, std::string const& code)
|
||||
|
||||
currency = beast::zero;
|
||||
|
||||
std::transform(
|
||||
code.begin(),
|
||||
code.end(),
|
||||
currency.begin() + detail::isoCodeOffset,
|
||||
[](auto c) {
|
||||
return static_cast<unsigned char>(
|
||||
::toupper(static_cast<unsigned char>(c)));
|
||||
});
|
||||
std::copy(
|
||||
code.begin(), code.end(), currency.begin() + detail::isoCodeOffset);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user