diff options
author | Jeena Lee <ijeenalee@gmail.com> | 2016-08-10 15:30:12 -0700 |
---|---|---|
committer | Jeena Lee <ijeenalee@gmail.com> | 2016-08-12 15:40:09 -0700 |
commit | 69f4cf680851e9690f8d93bd9fd44d1eca725882 (patch) | |
tree | 9d38fc52a59773ed97bcec44503bdeb76a6b113f /components/script/dom/headers.rs | |
parent | fabe2b8f7e5693d705427959a07a380d52c16e26 (diff) | |
download | servo-69f4cf680851e9690f8d93bd9fd44d1eca725882.tar.gz servo-69f4cf680851e9690f8d93bd9fd44d1eca725882.zip |
Modify Headers API to correctly validate value.
This commit modifies the headers API script to correctly validate value. As a result of this change, more wpt tests pass. The commit also changes the expected test results.
Diffstat (limited to 'components/script/dom/headers.rs')
-rw-r--r-- | components/script/dom/headers.rs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs index 3329952e0a9..cb3b4d13e48 100644 --- a/components/script/dom/headers.rs +++ b/components/script/dom/headers.rs @@ -80,8 +80,11 @@ impl HeadersMethods for Headers { return Ok(()); } // Step 7 - let mut combined_value = self.header_list.borrow_mut().get_raw(&valid_name).unwrap()[0].clone(); - combined_value.push(b","[0]); + let mut combined_value: Vec<u8> = vec![]; + if let Some(v) = self.header_list.borrow().get_raw(&valid_name) { + combined_value = v[0].clone(); + combined_value.push(b","[0]); + } combined_value.extend(valid_value.iter().cloned()); self.header_list.borrow_mut().set_raw(valid_name, vec![combined_value]); Ok(()) @@ -165,8 +168,6 @@ impl Headers { match filler { // Step 1 Some(HeadersOrByteStringSequenceSequence::Headers(h)) => { - // header_list_copy has type hyper::header::Headers - let header_list_copy = h.header_list.clone(); for header in h.header_list.borrow().iter() { try!(self.Append( ByteString::new(Vec::from(header.name())), @@ -346,20 +347,24 @@ fn is_field_name(name: &ByteString) -> bool { // field-content = field-vchar [ 1*( SP / HTAB / field-vchar ) // field-vchar ] fn is_field_content(value: &ByteString) -> bool { - if value.len() == 0 { + let value_len = value.len(); + + if value_len == 0 { return false; } if !is_field_vchar(value[0]) { return false; } - for &ch in &value[1..value.len() - 1] { - if !is_field_vchar(ch) || !is_space(ch) || !is_htab(ch) { - return false; + if value_len > 2 { + for &ch in &value[1..value_len - 1] { + if !is_field_vchar(ch) && !is_space(ch) && !is_htab(ch) { + return false; + } } } - if !is_field_vchar(value[value.len() - 1]) { + if !is_field_vchar(value[value_len - 1]) { return false; } |