LibURL: Don't consider file:// URL hosts as always opaque

Which was resulting in file URL hosts not being correctly percent
decoded.
This commit is contained in:
Shannon Booth 2024-08-04 13:33:09 +12:00 committed by Andreas Kling
parent dd7c720657
commit a661daea71
Notes: github-actions[bot] 2024-08-04 08:38:21 +00:00
3 changed files with 22 additions and 2 deletions

View file

@ -78,6 +78,16 @@ port => ''
pathname => '/d:/'
search => ''
hash => ''
new URL('file://a%C2%ADb/p', undefined)
protocol => 'file:'
username => ''
password => ''
host => 'ab'
hostname => 'ab'
port => ''
pathname => '/p'
search => ''
hash => ''
=========================================
URL.parse('ftp://serenityos.org:21', undefined)
protocol => 'ftp:'
@ -159,3 +169,13 @@ port => ''
pathname => '/d:/'
search => ''
hash => ''
URL.parse('file://a%C2%ADb/p', undefined)
protocol => 'file:'
username => ''
password => ''
host => 'ab'
hostname => 'ab'
port => ''
pathname => '/p'
search => ''
hash => ''

View file

@ -22,6 +22,7 @@
{ input: 'http://serenityos.org/cat?dog#meow"woof' },
{ input: '/hello', base: 'file://friends/' },
{ input: '//d:/..', base: 'file:///C:/a/b' },
{ input: 'file://a%C2%ADb/p' },
];
for (url of urls) {

View file

@ -1485,8 +1485,7 @@ URL Parser::basic_parse(StringView raw_input, Optional<URL> const& base_url, Opt
// 3. Otherwise, run these steps:
else {
// 1. Let host be the result of host parsing buffer with url is not special.
// FIXME: It seems we are not passing through url is not special through here
auto host = parse_host(buffer.string_view(), true);
auto host = parse_host(buffer.string_view(), !url->is_special());
// 2. If host is failure, then return failure.
if (!host.has_value())