use kekse::CookieJar;
fn main() {
let hostile = "garbage; =novalue; broken pair; SID=deadbeef; ;;; theme";
let reported = CookieJar::parse_strict(hostile);
let sid = reported
.value
.get_all("SID")
.find(|c| !c.value().is_empty())
.map(|c| c.value());
println!("hostile header: {hostile:?}");
println!(
" -> recovered SID = {sid:?} ({} pair(s) kept)\n",
reported.value.len()
);
assert_eq!(sid, Some("deadbeef"));
println!("what the parse refused:");
for issue in &reported.issues {
println!(" - {issue}");
}
assert!(reported.into_result().is_err());
println!();
let long = "a=b; ".repeat(10_000);
let nasties = [
"", "=", ";;;;;;", "k=\u{0}\u{1}\u{7f}", "x=y\r\nInjected: header", "🍪=🎃", long.as_str(), ];
println!("corrupted inputs (none panic):");
for nasty in nasties {
let reported = CookieJar::parse_strict(nasty);
let preview: String = nasty.chars().take(16).collect();
println!(
" {:>2} pair(s), {:>2} issue(s) from {preview:?}",
reported.value.len(),
reported.issues.len()
);
}
println!("\nevery input returned a (possibly empty) jar plus its report — no panics.");
}