diff --git a/AK/URLParser.cpp b/AK/URLParser.cpp index 06e3723b18..daedbc50c9 100644 --- a/AK/URLParser.cpp +++ b/AK/URLParser.cpp @@ -174,7 +174,7 @@ URL URLParser::parse(Badge, StringView const& raw_input, URL const* base_ur size_t start_index = 0; size_t end_index = raw_input.length(); for (size_t i = 0; i < raw_input.length(); ++i) { - if (raw_input[i] <= 0x20) { + if (0 <= raw_input[i] && raw_input[i] <= 0x20) { ++start_index; has_validation_error = true; } else { @@ -182,7 +182,7 @@ URL URLParser::parse(Badge, StringView const& raw_input, URL const* base_ur } } for (ssize_t i = raw_input.length() - 1; i >= 0; --i) { - if (raw_input[i] <= 0x20) { + if (0 <= raw_input[i] && raw_input[i] <= 0x20) { --end_index; has_validation_error = true; } else { diff --git a/Tests/AK/TestURL.cpp b/Tests/AK/TestURL.cpp index 9fff681525..1fc2a0679a 100644 --- a/Tests/AK/TestURL.cpp +++ b/Tests/AK/TestURL.cpp @@ -328,3 +328,12 @@ TEST_CASE(leading_and_trailing_whitespace) EXPECT(url.is_valid()); EXPECT_EQ(url.to_string(), "https://foo.com/"); } + +TEST_CASE(unicode) +{ + URL url { "http://example.com/_ünicöde_téxt_©" }; + EXPECT(url.is_valid()); + EXPECT_EQ(url.path(), "/_ünicöde_téxt_©"); + EXPECT(url.query().is_null()); + EXPECT(url.fragment().is_null()); +}