diff --git a/Userland/Libraries/LibHTTP/HttpRequest.cpp b/Userland/Libraries/LibHTTP/HttpRequest.cpp index 60d8dd05d9..41c85a0566 100644 --- a/Userland/Libraries/LibHTTP/HttpRequest.cpp +++ b/Userland/Libraries/LibHTTP/HttpRequest.cpp @@ -226,11 +226,22 @@ ErrorOr HttpRequest::from_raw_request(Read request.m_headers = move(headers); auto url_parts = resource.split_limit('?', 2, SplitBehavior::KeepEmpty); + auto url_part_to_string = [](DeprecatedString const& url_part) -> ErrorOr { + auto query_string_or_error = String::from_deprecated_string(url_part); + if (!query_string_or_error.is_error()) + return query_string_or_error.release_value(); + + if (query_string_or_error.error().code() == ENOMEM) + return ParseError::OutOfMemory; + + return ParseError::InvalidURL; + }; + request.m_url.set_cannot_be_a_base_url(true); if (url_parts.size() == 2) { request.m_resource = url_parts[0]; request.m_url.set_paths({ url_parts[0] }); - request.m_url.set_query(String::from_deprecated_string(url_parts[1]).release_value_but_fixme_should_propagate_errors()); + request.m_url.set_query(TRY(url_part_to_string(url_parts[1]))); } else { request.m_resource = resource; request.m_url.set_paths({ resource }); diff --git a/Userland/Libraries/LibHTTP/HttpRequest.h b/Userland/Libraries/LibHTTP/HttpRequest.h index 2ad67797c0..e63326291a 100644 --- a/Userland/Libraries/LibHTTP/HttpRequest.h +++ b/Userland/Libraries/LibHTTP/HttpRequest.h @@ -22,7 +22,8 @@ public: RequestTooLarge, RequestIncomplete, OutOfMemory, - UnsupportedMethod + UnsupportedMethod, + InvalidURL }; static StringView parse_error_to_string(ParseError error)