#![no_main] use libfuzzer_sys::fuzz_target; use http::{HeaderName, HeaderValue, Request, Uri, Method, Version}; fuzz_target!(|data: &[u8]| { if data.is_empty() { return; } // Try to parse as raw header name+value pairs if let Ok(s) = std::str::from_utf8(data) { for line in s.lines().take(10) { if let Some(pos) = line.find(':') { let name_str = &line[..pos].trim(); let val_str = &line[pos + 1..].trim(); let _ = HeaderName::from_bytes(name_str.as_bytes()); let _ = HeaderValue::from_bytes(val_str.as_bytes()); } } } // Fuzz HeaderName directly let _ = HeaderName::from_bytes(data); // Fuzz HeaderValue directly let _ = HeaderValue::from_bytes(data); // Fuzz URI parsing if let Ok(s) = std::str::from_utf8(data) { let _: Result = s.parse(); } // Fuzz Method parsing if let Ok(s) = std::str::from_utf8(data) { let _: Result = s.parse(); } // Fuzz Version parsing let _ = match data.first().copied().unwrap_or(0) { 0 => Version::HTTP_09, 1 => Version::HTTP_10, 2 => Version::HTTP_11, 3 => Version::HTTP_2, 4 => Version::HTTP_3, _ => Version::HTTP_11, }; });