avoid panic for headers

This commit is contained in:
Martin Algesten
2018-07-02 09:09:26 +02:00
parent 312c4e5662
commit 9cf33365e5
4 changed files with 10 additions and 15 deletions

View File

@@ -119,7 +119,7 @@ impl Agent {
{ {
add_header( add_header(
&mut self.headers, &mut self.headers,
Header::new(&header.into(), &value.into()).expect("Failed to parse header"), Header::new(&header.into(), &value.into()),
); );
self self
} }

View File

@@ -1,4 +1,4 @@
use ascii::AsciiString; use ascii::{AsAsciiStr, AsciiString};
use error::Error; use error::Error;
use std::str::FromStr; use std::str::FromStr;
@@ -16,11 +16,11 @@ impl ::std::fmt::Debug for Header {
} }
impl Header { impl Header {
pub fn new(name: &str, value: &str) -> Result<Self, Error> { pub fn new(name: &str, value: &str) -> Self {
let line = let s = format!("{}: {}", name, value);
AsciiString::from_str(&format!("{}: {}", name, value)).map_err(|_| Error::BadHeader)?; let line = unsafe { s.as_ascii_str_unchecked().to_owned() };
let index = name.len(); let index = name.len();
Ok(Header { line, index }) Header { line, index }
} }
/// The header name. /// The header name.

View File

@@ -190,10 +190,7 @@ impl Request {
K: Into<String>, K: Into<String>,
V: Into<String>, V: Into<String>,
{ {
add_header( add_header(&mut self.headers, Header::new(&header.into(), &value.into()));
&mut self.headers,
Header::new(&header.into(), &value.into()).expect("Failed to parse header"),
);
self self
} }

View File

@@ -58,7 +58,7 @@ impl Unit {
// also don't write this if the user has set it themselves // also don't write this if the user has set it themselves
if !is_chunked && !req.has("content-length") { if !is_chunked && !req.has("content-length") {
if let Some(size) = body.size { 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(""); let password = url.password().unwrap_or("");
if (username != "" || password != "") && !req.has("authorization") { if (username != "" || password != "") && !req.has("authorization") {
let encoded = base64::encode(&format!("{}:{}", username, password)); 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 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 name = c.name().to_string();
let value = c.value().to_string(); let value = c.value().to_string();
let nameval = Cookie::new(name, value).encoded().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() .collect()
} }