mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-01 05:41:01 +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
	
	 Timothy Flynn
						Timothy Flynn