Skip to content

Commit 51e9f5d

Browse files
committed
MP4: Fix panic on large stts entry counts
1 parent dfb5601 commit 51e9f5d

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

lofty/src/mp4/properties.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::config::ParsingMode;
44
use crate::error::{LoftyError, Result};
55
use crate::macros::{decode_err, err, try_vec};
66
use crate::properties::FileProperties;
7+
use crate::util::alloc::VecFallibleCapacity;
78
use crate::util::math::RoundedDivision;
89

910
use std::io::{Cursor, Read, Seek, SeekFrom};
@@ -340,7 +341,7 @@ where
340341
let _version_and_flags = reader.read_uint::<BigEndian>(4)?;
341342

342343
let entry_count = reader.read_u32::<BigEndian>()?;
343-
let mut entries = Vec::with_capacity(entry_count as usize);
344+
let mut entries = Vec::try_with_capacity_stable(entry_count as usize)?;
344345

345346
for _ in 0..entry_count {
346347
let sample_count = reader.read_u32::<BigEndian>()?;

lofty/tests/fuzz/mp4file_read_from.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,11 @@ fn panic5() {
4747
);
4848
let _ = Mp4File::read_from(&mut reader, ParseOptions::new());
4949
}
50+
51+
#[test]
52+
fn panic6() {
53+
let mut reader = crate::get_reader(
54+
"mp4file_read_from/ui_steam_smoother_friend_join_IDX_53_RAND_83672409887817275057956.m4a",
55+
);
56+
let _ = Mp4File::read_from(&mut reader, ParseOptions::new());
57+
}

0 commit comments

Comments
 (0)