From 75cecd19a5201d8a2030e3293c69da59b8d21a62 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 29 Dec 2023 17:35:01 +0100 Subject: [PATCH] AK: Skip UTF-8 validation inside URL parser Since we're already building up a percent-encoded ASCII-only string in the internal parser buffer, there's no need to do a second UTF-8 validation pass before assigning each part of the parsed URL. This makes URL parsing signficantly faster. --- AK/URLParser.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/AK/URLParser.cpp b/AK/URLParser.cpp index d8cc906eb6..c6e922f072 100644 --- a/AK/URLParser.cpp +++ b/AK/URLParser.cpp @@ -891,7 +891,7 @@ URL URLParser::basic_parse(StringView raw_input, Optional const& base_url, } // 2. Set url’s scheme to buffer. - url->m_scheme = buffer.to_string().release_value_but_fixme_should_propagate_errors(); + url->m_scheme = buffer.to_string_without_validation(); // 3. If state override is given, then: if (state_override.has_value()) { @@ -1554,7 +1554,7 @@ URL URLParser::basic_parse(StringView raw_input, Optional const& base_url, buffer.append(':'); } // 2. Append buffer to url’s path. - url->m_paths.append(buffer.to_string().release_value_but_fixme_should_propagate_errors()); + url->m_paths.append(buffer.to_string_without_validation()); } // 5. Set buffer to the empty string. @@ -1592,7 +1592,7 @@ URL URLParser::basic_parse(StringView raw_input, Optional const& base_url, // 1. If c is U+003F (?), then set url’s query to the empty string and state to query state. if (code_point == '?') { - url->m_paths[0] = buffer.to_string().release_value_but_fixme_should_propagate_errors(); + url->m_paths[0] = buffer.to_string_without_validation(); url->m_query = String {}; buffer.clear(); state = State::Query; @@ -1600,7 +1600,7 @@ URL URLParser::basic_parse(StringView raw_input, Optional const& base_url, // 2. Otherwise, if c is U+0023 (#), then set url’s fragment to the empty string and state to fragment state. else if (code_point == '#') { // NOTE: This needs to be percent decoded since the member variables contain decoded data. - url->m_paths[0] = buffer.to_string().release_value_but_fixme_should_propagate_errors(); + url->m_paths[0] = buffer.to_string_without_validation(); url->m_fragment = String {}; buffer.clear(); state = State::Fragment; @@ -1619,7 +1619,7 @@ URL URLParser::basic_parse(StringView raw_input, Optional const& base_url, if (code_point != end_of_file) { URL::append_percent_encoded_if_necessary(buffer, code_point, URL::PercentEncodeSet::C0Control); } else { - url->m_paths[0] = buffer.to_string().release_value_but_fixme_should_propagate_errors(); + url->m_paths[0] = buffer.to_string_without_validation(); buffer.clear(); } }