LibWeb: Replace "+" in value with a space while decoding search params

This commit is contained in:
Alisson Lauffer 2024-07-28 16:23:59 -03:00 committed by Andreas Kling
parent 9c72fc9642
commit d38b28b57b
Notes: github-actions[bot] 2024-08-10 08:47:17 +00:00
3 changed files with 14 additions and 1 deletions

View file

@ -0,0 +1,2 @@
key 'key'
value 'value1 value2'

View file

@ -0,0 +1,10 @@
<script src="../include.js"></script>
<script>
test(() => {
const params = new URLSearchParams('key=value1+value2');
for (const [key, value] of params) {
println(`key '${key}'`);
println(`value '${value}'`);
}
});
</script>

View file

@ -113,10 +113,11 @@ ErrorOr<Vector<QueryParam>> url_decode(StringView input)
// 4. Replace any 0x2B (+) in name and value with 0x20 (SP). // 4. Replace any 0x2B (+) in name and value with 0x20 (SP).
auto space_decoded_name = name.replace("+"sv, " "sv, ReplaceMode::All); auto space_decoded_name = name.replace("+"sv, " "sv, ReplaceMode::All);
auto space_decoded_value = value.replace("+"sv, " "sv, ReplaceMode::All);
// 5. Let nameString and valueString be the result of running UTF-8 decode without BOM on the percent-decoding of name and value, respectively. // 5. Let nameString and valueString be the result of running UTF-8 decode without BOM on the percent-decoding of name and value, respectively.
auto name_string = String::from_utf8_with_replacement_character(URL::percent_decode(space_decoded_name)); auto name_string = String::from_utf8_with_replacement_character(URL::percent_decode(space_decoded_name));
auto value_string = String::from_utf8_with_replacement_character(URL::percent_decode(value)); auto value_string = String::from_utf8_with_replacement_character(URL::percent_decode(space_decoded_value));
TRY(output.try_empend(move(name_string), move(value_string))); TRY(output.try_empend(move(name_string), move(value_string)));
} }