diff --git a/lofty/src/wavpack/properties.rs b/lofty/src/wavpack/properties.rs index 255c7c89..f2363999 100644 --- a/lofty/src/wavpack/properties.rs +++ b/lofty/src/wavpack/properties.rs @@ -322,6 +322,10 @@ fn get_extended_meta_info( index += 2; } + if size == 0 { + decode_err!(@BAIL WavPack, "Encountered a zero-sized block"); + } + if id & ID_FLAG_ODD_SIZE > 0 { size -= 1; } diff --git a/lofty/tests/fuzz/assets/wavpackfile_read_from/bb b/lofty/tests/fuzz/assets/wavpackfile_read_from/bb new file mode 100644 index 00000000..01457ab6 Binary files /dev/null and b/lofty/tests/fuzz/assets/wavpackfile_read_from/bb differ diff --git a/lofty/tests/fuzz/wavpackfile_read_from.rs b/lofty/tests/fuzz/wavpackfile_read_from.rs index 8419de7e..dca46f7f 100644 --- a/lofty/tests/fuzz/wavpackfile_read_from.rs +++ b/lofty/tests/fuzz/wavpackfile_read_from.rs @@ -90,3 +90,9 @@ fn panic1() { let mut reader = crate::get_reader("wavpackfile_read_from/output"); let _ = WavPackFile::read_from(&mut reader, ParseOptions::default()); } + +#[test_log::test] +fn panic2() { + let mut reader = crate::get_reader("wavpackfile_read_from/bb"); + let _ = WavPackFile::read_from(&mut reader, ParseOptions::default()); +}