mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
common: Don't terminate on null character in UrlDecode
The previous behavior was the result of casting the result returned from the libevent function evhttp_uridecode to std:string but this was probably not intended.
This commit is contained in:
parent
099fa57151
commit
992c714451
2 changed files with 4 additions and 7 deletions
|
@ -25,11 +25,6 @@ std::string UrlDecode(std::string_view url_encoded)
|
||||||
// Only if there is no error and the pointer is set to the end of
|
// Only if there is no error and the pointer is set to the end of
|
||||||
// the string, we can be sure both characters were valid hex
|
// the string, we can be sure both characters were valid hex
|
||||||
if (ec == std::errc{} && p == url_encoded.data() + i + 3) {
|
if (ec == std::errc{} && p == url_encoded.data() + i + 3) {
|
||||||
// A null character terminates the string
|
|
||||||
if (decoded_value == 0) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
res += static_cast<char>(decoded_value);
|
res += static_cast<char>(decoded_value);
|
||||||
// Next two characters are part of the percent encoding
|
// Next two characters are part of the percent encoding
|
||||||
i += 2;
|
i += 2;
|
||||||
|
|
|
@ -63,8 +63,10 @@ BOOST_AUTO_TEST_CASE(decode_lowercase_hex_test) {
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(decode_internal_nulls_test) {
|
BOOST_AUTO_TEST_CASE(decode_internal_nulls_test) {
|
||||||
BOOST_CHECK_EQUAL(UrlDecode("%00%00x%00%00"), "");
|
std::string result1{"\0\0x\0\0", 5};
|
||||||
BOOST_CHECK_EQUAL(UrlDecode("abc%00%00"), "abc");
|
BOOST_CHECK_EQUAL(UrlDecode("%00%00x%00%00"), result1);
|
||||||
|
std::string result2{"abc\0\0", 5};
|
||||||
|
BOOST_CHECK_EQUAL(UrlDecode("abc%00%00"), result2);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
Loading…
Add table
Reference in a new issue