Skip to content

Commit eae5cd2

Browse files
committed
WV: Add extra length check for wrong sized large blocks
1 parent 59d6e44 commit eae5cd2

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

lofty/src/wavpack/properties.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ where
224224
log::warn!("Unable to calculate duration, unknown sample counts are not yet supported");
225225
return Ok(properties);
226226
}
227-
227+
228228
if total_samples == 0 || properties.sample_rate == 0 {
229229
if parse_mode == ParsingMode::Strict {
230230
decode_err!(@BAIL WavPack, "Unable to calculate duration (sample count == 0 || sample rate == 0)")
@@ -317,6 +317,10 @@ fn get_extended_meta_info(
317317

318318
let is_large = id & ID_FLAG_LARGE_SIZE > 0;
319319
if is_large {
320+
if block_size - index < 2 {
321+
break;
322+
}
323+
320324
size += u32::from(block_content[index]) << 9;
321325
size += u32::from(block_content[index + 1]) << 17;
322326
index += 2;

lofty/tests/fuzz/wavpackfile_read_from.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,11 @@ fn panic2() {
9696
let mut reader = crate::get_reader("wavpackfile_read_from/bb");
9797
let _ = WavPackFile::read_from(&mut reader, ParseOptions::default());
9898
}
99+
100+
#[test_log::test]
101+
fn panic3() {
102+
let mut reader = crate::get_reader(
103+
"wavpackfile_read_from/crash-c6f0765886234e3a25b182f01bc3f92880188f5b_minimized",
104+
);
105+
let _ = WavPackFile::read_from(&mut reader, ParseOptions::default());
106+
}

0 commit comments

Comments
 (0)