Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0bfbd14

Browse files
mtrenkmannglynos
authored andcommitted
Accept non-ASCII octets in percent-decoding (#119)
* Allow octets outside ASCII range in percent-decoding * Change unit test to accept %80 octet in percent-decoding * Add test that percent-decodes UTF-8 data
1 parent 6be6c24 commit 0bfbd14

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

include/network/uri/detail/decode.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ InputIterator decode_char(InputIterator it, charT *out) {
4040
++it;
4141
auto h1 = *it;
4242
auto v1 = detail::letter_to_hex(h1);
43-
if (h0 >= '8') {
44-
// unable to decode characters outside the ASCII character set.
45-
throw percent_decoding_error(uri_error::conversion_failed);
46-
}
4743
++it;
4844
*out = static_cast<charT>((0x10 * v0) + v1);
4945
return it;

test/uri_encoding_test.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,17 +121,26 @@ TEST(uri_encoding_test, decode_iterator_error_6) {
121121
network::percent_decoding_error);
122122
}
123123

124-
TEST(uri_encoding_test, decode_iterator_not_an_error) {
124+
TEST(uri_encoding_test, decode_iterator_not_an_error_1) {
125125
const std::string encoded("%20");
126126
std::string instance;
127127
ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded),
128128
std::back_inserter(instance)));
129129
}
130130

131-
TEST(uri_encoding_test, decode_iterator_error_7) {
131+
TEST(uri_encoding_test, decode_iterator_not_an_error_2) {
132132
const std::string encoded("%80");
133133
std::string instance;
134-
ASSERT_THROW(network::uri::decode(std::begin(encoded), std::end(encoded),
135-
std::back_inserter(instance)),
136-
network::percent_decoding_error);
134+
ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded),
135+
std::back_inserter(instance)));
136+
}
137+
138+
TEST(uri_encoding_test, decode_accepts_utf8) {
139+
const std::string encoded("%EB%B2%95%EC%A0%95%EB%8F%99");
140+
std::string instance;
141+
ASSERT_NO_THROW(network::uri::decode(std::begin(encoded), std::end(encoded),
142+
std::back_inserter(instance)));
143+
144+
const std::string unencoded = u8"법정동";
145+
ASSERT_EQ(unencoded, instance);
137146
}

0 commit comments

Comments
 (0)