From a744ac26dae5c6de52569da1af3875943f7f98af Mon Sep 17 00:00:00 2001 From: Naveen Gattu Date: Fri, 17 Dec 2021 10:09:22 -0800 Subject: [PATCH] concept-response-clone: Ensure header guard is cloned after headers https://fetch.spec.whatwg.org/#concept-response-clone If the header guard of the response to clone is `immutable`, then copying the headers to the new response will fail with `Guard is immutable` unless we ensure the guard is copied _after_ the headers. https://github.com/servo/servo/blob/8650794391729c6fee34bc2644ccbb85bd8fd58d/components/script/dom/response.rs#L331-L334 fn Append(&self, name: ByteString, value: ByteString) -> ErrorResult { // Step 1 let value = normalize_value(value); // Step 2 let (mut valid_name, valid_value) = validate_name_and_value(name, value)?; valid_name = valid_name.to_lowercase(); // Step 3 if self.guard.get() == Guard::Immutable { return Err(Error::Type("Guard is immutable".to_string())); } --- components/script/dom/response.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/script/dom/response.rs b/components/script/dom/response.rs index 432fcbeb3e4..85d20a62d06 100644 --- a/components/script/dom/response.rs +++ b/components/script/dom/response.rs @@ -330,8 +330,8 @@ impl ResponseMethods for Response { // Step 2 let new_response = Response::new(&self.global()); - new_response.Headers().set_guard(self.Headers().get_guard()); new_response.Headers().copy_from_headers(self.Headers())?; + new_response.Headers().set_guard(self.Headers().get_guard()); // https://fetch.spec.whatwg.org/#concept-response-clone // Instead of storing a net_traits::Response internally, we