wallet: encode equals signs in URIs

The URI parser treats '=' as the parameter delimiter, so leaving it raw in text fields makes make_uri output fail to parse
This commit is contained in:
Samy
2026-08-21 13:50:55 +02:00
parent 0aa9c51bd8
commit f7d27f05dd
2 changed files with 17 additions and 1 deletions
@@ -43,7 +43,7 @@ namespace net_utils
inline const char* get_unsave_chars()
{
//static constexpr char unsave_chars[] = "\"<>%\\^[]`+$,@:;/!#?=&";
static constexpr const char unsave_chars[] = "\"<>%\\^[]`+$,@:;!#&";
static constexpr const char unsave_chars[] = "\"<>%\\^[]`+$,@:;!#&=";
return unsave_chars;
}
+16
View File
@@ -274,3 +274,19 @@ TEST(uri, url_encoded_once)
ASSERT_EQ(description, "foo 20");
}
TEST(uri, make_uri_encodes_equals)
{
tools::wallet2 w(cryptonote::TESTNET);
std::string error;
const std::string uri = w.make_uri(TEST_ADDRESS, "", 0, "key=value", "name=value", error);
ASSERT_TRUE(error.empty());
ASSERT_EQ(uri, "monero:" TEST_ADDRESS"?recipient_name=name%3Dvalue&tx_description=key%3Dvalue");
std::string address, payment_id, recipient_name, description;
uint64_t amount;
std::vector<std::string> unknown_parameters;
ASSERT_TRUE(w.parse_uri(uri, address, payment_id, amount, description, recipient_name, unknown_parameters, error));
EXPECT_EQ(recipient_name, "name=value");
EXPECT_EQ(description, "key=value");
}