From 999653e7f3a5eadb6e76102748822486f643011b Mon Sep 17 00:00:00 2001 From: Martin Algesten Date: Sun, 20 Oct 2019 10:58:16 +0200 Subject: [PATCH] handle header with spaces before value --- src/header.rs | 10 ++++++++++ src/test/simple.rs | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/header.rs b/src/header.rs index 4c96159..a2b2e08 100644 --- a/src/header.rs +++ b/src/header.rs @@ -94,6 +94,16 @@ impl FromStr for Header { return Err(Error::BadHeader); } + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 + // The field value MAY be preceded by any amount of LWS, though a single SP is preferred. + let value_from = &s[index..]; + let voff = match value_from.find(|c: char| !c.is_whitespace()) { + Some(n) => n, + None => 0, + }; + + let index = index + voff; + Ok(Header { line, index }) } } diff --git a/src/test/simple.rs b/src/test/simple.rs index d8e879c..e596057 100644 --- a/src/test/simple.rs +++ b/src/test/simple.rs @@ -151,3 +151,16 @@ pub fn no_status_text() { assert!(resp.ok()); assert_eq!(resp.status(), 200); } + +#[test] +pub fn header_with_spaces_before_value() { + test::set_handler("/space_before_value", |unit| { + assert!(unit.has("X-Test")); + assert_eq!(unit.header("X-Test").unwrap(), "value"); + test::make_response(200, "OK", vec![], vec![]) + }); + let resp = get("test://host/space_before_value") + .set("X-Test", " value") + .call(); + assert_eq!(resp.status(), 200); +}