mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-08 10:01:53 +00:00
LibWeb: Mark fetched body streams with a TypeError if the request failed
This will cause an exception to be thrown if user attempts to read from the response stream of a failed request. This is unfortunately not testable in CI. It requires a network response (i.e. not a file:// URL). We also cannot import relevant WPT tests; they exercise this condition with a python-generated response.
This commit is contained in:
parent
b54a520b69
commit
4d0301d2d2
Notes:
github-actions[bot]
2025-04-20 14:51:38 +00:00
Author: https://github.com/trflynn89
Commit: 4d0301d2d2
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4405
Reviewed-by: https://github.com/alimpfard ✅
1 changed files with 8 additions and 1 deletions
|
@ -2470,17 +2470,24 @@ WebIDL::ExceptionOr<GC::Ref<PendingResponse>> nonstandard_resource_loader_file_o
|
|||
} else {
|
||||
response->set_type(Infrastructure::Response::Type::Error);
|
||||
response->set_status(status_code.value_or(400));
|
||||
|
||||
auto [body, _] = TRY_OR_IGNORE(extract_body(realm, data));
|
||||
response->set_body(move(body));
|
||||
response->set_body(body);
|
||||
|
||||
auto body_info = response->body_info();
|
||||
body_info.encoded_size = timing_info.encoded_body_size;
|
||||
body_info.decoded_size = data.size();
|
||||
response->set_body_info(body_info);
|
||||
|
||||
for (auto const& [name, value] : response_headers.headers()) {
|
||||
auto header = Infrastructure::Header::from_latin1_pair(name, value);
|
||||
response->header_list()->append(move(header));
|
||||
}
|
||||
|
||||
// 16.1.2.2. Otherwise, if stream is readable, error stream with a TypeError.
|
||||
if (body->stream()->is_readable())
|
||||
body->stream()->error(JS::TypeError::create(realm, error));
|
||||
|
||||
if (reason_phrase.has_value())
|
||||
response->set_status_message(MUST(ByteBuffer::copy(reason_phrase.value().bytes())));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue