From 9cf33365e5db8022638bf4d26d3d18a45eab4b8c Mon Sep 17 00:00:00 2001 From: Martin Algesten Date: Mon, 2 Jul 2018 09:09:26 +0200 Subject: [PATCH] avoid panic for headers --- src/agent.rs | 2 +- src/header.rs | 10 +++++----- src/request.rs | 5 +---- src/unit.rs | 8 +++----- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/agent.rs b/src/agent.rs index 0254d2a..f574f11 100644 --- a/src/agent.rs +++ b/src/agent.rs @@ -119,7 +119,7 @@ impl Agent { { add_header( &mut self.headers, - Header::new(&header.into(), &value.into()).expect("Failed to parse header"), + Header::new(&header.into(), &value.into()), ); self } diff --git a/src/header.rs b/src/header.rs index 2a1330f..ee5b8ee 100644 --- a/src/header.rs +++ b/src/header.rs @@ -1,4 +1,4 @@ -use ascii::AsciiString; +use ascii::{AsAsciiStr, AsciiString}; use error::Error; use std::str::FromStr; @@ -16,11 +16,11 @@ impl ::std::fmt::Debug for Header { } impl Header { - pub fn new(name: &str, value: &str) -> Result { - let line = - AsciiString::from_str(&format!("{}: {}", name, value)).map_err(|_| Error::BadHeader)?; + pub fn new(name: &str, value: &str) -> Self { + let s = format!("{}: {}", name, value); + let line = unsafe { s.as_ascii_str_unchecked().to_owned() }; let index = name.len(); - Ok(Header { line, index }) + Header { line, index } } /// The header name. diff --git a/src/request.rs b/src/request.rs index 233ba85..b28745c 100644 --- a/src/request.rs +++ b/src/request.rs @@ -190,10 +190,7 @@ impl Request { K: Into, V: Into, { - add_header( - &mut self.headers, - Header::new(&header.into(), &value.into()).expect("Failed to parse header"), - ); + add_header(&mut self.headers, Header::new(&header.into(), &value.into())); self } diff --git a/src/unit.rs b/src/unit.rs index 0a76064..5f018fb 100644 --- a/src/unit.rs +++ b/src/unit.rs @@ -58,7 +58,7 @@ impl Unit { // also don't write this if the user has set it themselves if !is_chunked && !req.has("content-length") { if let Some(size) = body.size { - extra.push(Header::new("Content-Length", &format!("{}", size)).unwrap()); + extra.push(Header::new("Content-Length", &format!("{}", size))); } } @@ -66,7 +66,7 @@ impl Unit { let password = url.password().unwrap_or(""); if (username != "" || password != "") && !req.has("authorization") { let encoded = base64::encode(&format!("{}:{}", username, password)); - extra.push(Header::new("Authorization", &format!("Basic {}", encoded)).unwrap()); + extra.push(Header::new("Authorization", &format!("Basic {}", encoded))); } extra @@ -204,10 +204,8 @@ fn match_cookies<'a>(jar: &'a CookieJar, domain: &str, path: &str, is_secure: bo let name = c.name().to_string(); let value = c.value().to_string(); let nameval = Cookie::new(name, value).encoded().to_string(); - Header::new("Cookie", &nameval).ok() + Header::new("Cookie", &nameval) }) - .filter(|o| o.is_some()) - .map(|o| o.unwrap()) .collect() }