//! Native-messaging framing (src/framing.rs): never panics or over-allocates, and every frame read //! back is one that write_frame would have produced. #![no_main] use kestrove_desktop::framing::{read_frame, write_frame, MAX_FRAME}; use libfuzzer_sys::fuzz_target; fuzz_target!(|data: &[u8]| { let mut r = data; while let Ok(Some(frame)) = read_frame(&mut r) { assert!(frame.len() <= MAX_FRAME); let mut out = Vec::new(); write_frame(&mut out, &frame).expect("re-frame"); let mut again = out.as_slice(); assert_eq!( read_frame(&mut again).unwrap().as_deref(), Some(frame.as_slice()) ); } });