diff --git a/coding/coding_tests/strutil_test.cpp b/coding/coding_tests/strutil_test.cpp index ebfe83f971..9cc56cab98 100644 --- a/coding/coding_tests/strutil_test.cpp +++ b/coding/coding_tests/strutil_test.cpp @@ -15,7 +15,9 @@ UNIT_TEST(UrlEncode) { TEST_EQUAL(UrlEncode(""), "", ()); TEST_EQUAL(UrlEncode(" "), "%20", ()); + TEST_EQUAL(UrlEncode("%% "), "%25%25%20", ()); TEST_EQUAL(UrlEncode("20"), "20", ()); + TEST_EQUAL(UrlEncode("Guinea-Bissau"), "Guinea-Bissau", ()); TEST_EQUAL(UrlEncode(orig1), enc1, ()); TEST_EQUAL(UrlEncode(orig2), enc2, ()); TEST_EQUAL(UrlEncode(orig3), enc3, ()); @@ -26,7 +28,9 @@ UNIT_TEST(UrlDecode) { TEST_EQUAL(UrlDecode(""), "", ()); TEST_EQUAL(UrlDecode("%20"), " ", ()); + TEST_EQUAL(UrlDecode("%25%25%20"), "%% ", ()); TEST_EQUAL(UrlDecode("20"), "20", ()); + TEST_EQUAL(UrlDecode("Guinea-Bissau"), "Guinea-Bissau", ()); TEST_EQUAL(UrlDecode(enc1), orig1, ()); TEST_EQUAL(UrlDecode(enc2), orig2, ()); TEST_EQUAL(UrlDecode(enc3), orig3, ()); diff --git a/coding/strutil.hpp b/coding/strutil.hpp index ded0d0c727..ccbe109e58 100644 --- a/coding/strutil.hpp +++ b/coding/strutil.hpp @@ -78,7 +78,7 @@ inline string UrlEncode(string const & rawUrl) for (size_t i = 0; i < result.size(); ++i) { char const c = result[i]; - if (c < '.' || c == '/' || (c > '9' && c < 'A') || (c > 'Z' && c < '_') + if (c < '-' || c == '/' || (c > '9' && c < 'A') || (c > 'Z' && c < '_') || c == '`' || (c > 'z' && c < '~') || c > '~') { string hexStr("%");