From 093a29bab7eb27e78bb10506478ac486e8d61671 Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 28 Apr 2015 08:57:35 +0200 Subject: [PATCH] fix(headers): Do not parse empty values in list headers. In empty list header values ``, or list header values with empty items `foo, , bar`, the empty value is parsed, if the parser does not reject empty values an item is added to the resulting header. There can't be empty values. Added a test for it in AcceptEncoding. --- src/header/common/accept_encoding.rs | 2 +- src/header/parsing.rs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/header/common/accept_encoding.rs b/src/header/common/accept_encoding.rs index 0441d2fd..eed7c2eb 100644 --- a/src/header/common/accept_encoding.rs +++ b/src/header/common/accept_encoding.rs @@ -20,7 +20,7 @@ header! { test_accept_encoding { // From the RFC test_header!(test1, vec![b"compress, gzip"]); - test_header!(test2, vec![b""]); + test_header!(test2, vec![b""], Some(AcceptEncoding(vec![]))); test_header!(test3, vec![b"*"]); // Note: Removed quality 1 from gzip test_header!(test4, vec![b"compress;q=0.5, gzip"]); diff --git a/src/header/parsing.rs b/src/header/parsing.rs index 1ee74e01..07ded6c5 100644 --- a/src/header/parsing.rs +++ b/src/header/parsing.rs @@ -31,7 +31,10 @@ pub fn from_one_comma_delimited(raw: &[u8]) -> Option> { Ok(s) => { Some(s .split(',') - .map(|x| x.trim()) + .filter_map(|x| match x.trim() { + "" => None, + y => Some(y) + }) .filter_map(|x| x.parse().ok()) .collect()) }