Skip to content

Commit f11cc66

Browse files
committed
fix percent decoding in url_search_params
1 parent c4141be commit f11cc66

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

include/ada/url_search_params-inl.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,20 @@ inline void url_search_params::initialize(std::string_view input) {
2727
auto equal = current.find_first_of("=");
2828

2929
if (equal == std::string_view::npos) {
30-
params.emplace_back(current, "");
30+
auto name = std::string(current);
31+
std::replace(name.begin(), name.end(), '+', ' ');
32+
params.emplace_back(
33+
unicode::percent_decode(name, name.find_first_of('%')), "");
3134
} else {
32-
auto plain_name = current.substr(0, equal);
33-
auto plain_value = current.substr(equal + 1);
34-
auto name =
35-
unicode::percent_decode(plain_name, plain_name.find_first_of('%'));
36-
auto value =
37-
unicode::percent_decode(plain_value, plain_value.find_first_of('%'));
35+
auto name = std::string(current.substr(0, equal));
36+
auto value = std::string(current.substr(equal + 1));
3837

3938
std::replace(name.begin(), name.end(), '+', ' ');
4039
std::replace(value.begin(), value.end(), '+', ' ');
4140

42-
params.emplace_back(name, value);
41+
params.emplace_back(
42+
unicode::percent_decode(name, name.find_first_of('%')),
43+
unicode::percent_decode(value, value.find_first_of('%')));
4344
}
4445
};
4546

0 commit comments

Comments
 (0)