From d70ced0efc2a2b8625b0998ae48823035d0a5762 Mon Sep 17 00:00:00 2001 From: Martin Trenkmann Date: Thu, 18 Oct 2018 11:18:05 +0200 Subject: [PATCH 1/3] Allow octets outside ASCII range in percent-decoding --- include/network/uri/detail/decode.hpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/network/uri/detail/decode.hpp b/include/network/uri/detail/decode.hpp index 285e8c5d..9d0aaaa1 100644 --- a/include/network/uri/detail/decode.hpp +++ b/include/network/uri/detail/decode.hpp @@ -40,10 +40,6 @@ InputIterator decode_char(InputIterator it, charT *out) { ++it; auto h1 = *it; auto v1 = detail::letter_to_hex(h1); - if (h0 >= '8') { - // unable to decode characters outside the ASCII character set. - throw percent_decoding_error(uri_error::conversion_failed); - } ++it; *out = static_cast((0x10 * v0) + v1); return it; From 56ba072968131fa10b685761ab8e2d30f9bd7b60 Mon Sep 17 00:00:00 2001 From: Martin Trenkmann Date: Thu, 18 Oct 2018 11:25:45 +0200 Subject: [PATCH 2/3] Change unit test to accept %80 octet in percent-decoding --- test/uri_encoding_test.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/uri_encoding_test.cpp b/test/uri_encoding_test.cpp index d05c9824..aa3c344a 100644 --- a/test/uri_encoding_test.cpp +++ b/test/uri_encoding_test.cpp @@ -121,17 +121,16 @@ TEST(uri_encoding_test, decode_iterator_error_6) { network::percent_decoding_error); } -TEST(uri_encoding_test, decode_iterator_not_an_error) { +TEST(uri_encoding_test, decode_iterator_not_an_error_1) { const std::string encoded("%20"); std::string instance; ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded), std::back_inserter(instance))); } -TEST(uri_encoding_test, decode_iterator_error_7) { +TEST(uri_encoding_test, decode_iterator_not_an_error_2) { const std::string encoded("%80"); std::string instance; - ASSERT_THROW(network::uri::decode(std::begin(encoded), std::end(encoded), - std::back_inserter(instance)), - network::percent_decoding_error); + ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded), + std::back_inserter(instance))); } From 244362d1eb71985856ccf21234eef7a6a9c9449a Mon Sep 17 00:00:00 2001 From: Martin Trenkmann Date: Thu, 18 Oct 2018 11:34:19 +0200 Subject: [PATCH 3/3] Add test that percent-decodes UTF-8 data --- test/uri_encoding_test.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/uri_encoding_test.cpp b/test/uri_encoding_test.cpp index aa3c344a..e37988c8 100644 --- a/test/uri_encoding_test.cpp +++ b/test/uri_encoding_test.cpp @@ -134,3 +134,13 @@ TEST(uri_encoding_test, decode_iterator_not_an_error_2) { ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded), std::back_inserter(instance))); } + +TEST(uri_encoding_test, decode_accepts_utf8) { + const std::string encoded("%EB%B2%95%EC%A0%95%EB%8F%99"); + std::string instance; + ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded), + std::back_inserter(instance))); + + const std::string unencoded = u8"법정동"; + ASSERT_EQ(unencoded, instance); +}