diff --git a/src/header/map.rs b/src/header/map.rs index ad6b66cd..5cdd3c27 100644 --- a/src/header/map.rs +++ b/src/header/map.rs @@ -632,7 +632,7 @@ impl HeaderMap { /// ``` pub fn reserve(&mut self, additional: usize) { // TODO: This can't overflow if done properly... since the max # of - // elements is u16::MAX. + // elements is 150_000 let cap = self .entries .len() diff --git a/src/uri/mod.rs b/src/uri/mod.rs index 716ea1ad..22c39845 100644 --- a/src/uri/mod.rs +++ b/src/uri/mod.rs @@ -140,8 +140,8 @@ enum ErrorKind { SchemeTooLong, } -// u16::MAX is reserved for None -const MAX_LEN: usize = (u16::MAX - 1) as usize; +// 150_001 is for NONE +const MAX_LEN: usize = 150_000; const URI_CHARS: [u8; 256] = [ // 0 1 2 3 4 5 6 7 8 9 diff --git a/src/uri/path.rs b/src/uri/path.rs index cb89e9d0..9d5cfac5 100644 --- a/src/uri/path.rs +++ b/src/uri/path.rs @@ -11,10 +11,10 @@ use crate::byte_str::ByteStr; #[derive(Clone)] pub struct PathAndQuery { pub(super) data: ByteStr, - pub(super) query: u16, + pub(super) query: u32, } -const NONE: u16 = ::std::u16::MAX; +const NONE: u32 = 150_001; impl PathAndQuery { // Not public while `bytes` is unstable. @@ -32,7 +32,7 @@ impl PathAndQuery { match b { b'?' => { debug_assert_eq!(query, NONE); - query = i as u16; + query = i as u32; break; } b'#' => { diff --git a/src/uri/tests.rs b/src/uri/tests.rs index 719cb94e..224d9304 100644 --- a/src/uri/tests.rs +++ b/src/uri/tests.rs @@ -444,7 +444,7 @@ fn test_uri_parse_error() { fn test_max_uri_len() { let mut uri = vec![]; uri.extend(b"http://localhost/"); - uri.extend(vec![b'a'; 70 * 1024]); + uri.extend(vec![b'a'; 150_001]); let uri = String::from_utf8(uri).unwrap(); let res: Result = uri.parse();