diff --git a/fuzz/hfuzz_workspace/fec/input/foobar.fec b/fuzz/hfuzz_workspace/fec/input/foobar.fec new file mode 100644 index 0000000..36f512b --- /dev/null +++ b/fuzz/hfuzz_workspace/fec/input/foobar.fec @@ -0,0 +1,3 @@ +3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S9K3Uֹ1S< Ky7n* +u_ZE/'&< Ky7n* +u_ZE/'& \ No newline at end of file diff --git a/fuzz/src/bin/fec.rs b/fuzz/src/bin/fec.rs new file mode 100644 index 0000000..128cf1d --- /dev/null +++ b/fuzz/src/bin/fec.rs @@ -0,0 +1,36 @@ +#[cfg(not(windows))] +mod fuzz { + use std::{io::Cursor, sync::atomic::AtomicBool}; + + use avbroot::{ + format::fec::FecImage, + stream::{FromReader, SharedCursor, WriteZerosExt}, + }; + use honggfuzz::fuzz; + + pub fn main() { + loop { + fuzz!(|data: &[u8]| { + let cancel_signal = AtomicBool::new(false); + + let reader = Cursor::new(data); + if let Ok(fec) = FecImage::from_reader(reader) { + let mut input = SharedCursor::new(); + + // Allow verify() to get further, but don't blow up the host + // with excessive memory usage. + if fec.data_size < 64 * 1024 * 1024 { + input.write_zeros_exact(fec.data_size).unwrap(); + } + + let _ = fec.verify(|| Ok(Box::new(input.reopen())), &cancel_signal); + } + }); + } + } +} + +fn main() { + #[cfg(not(windows))] + fuzz::main(); +}