diff --git a/contrib/epee/include/net/abstract_http_client.h b/contrib/epee/include/net/abstract_http_client.h index 29a7ce19b..2d09ae1da 100644 --- a/contrib/epee/include/net/abstract_http_client.h +++ b/contrib/epee/include/net/abstract_http_client.h @@ -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; } diff --git a/tests/unit_tests/uri.cpp b/tests/unit_tests/uri.cpp index a5b521a38..90dabeb0e 100644 --- a/tests/unit_tests/uri.cpp +++ b/tests/unit_tests/uri.cpp @@ -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 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"); +}