Skip to content

Commit 7a0b275

Browse files
authored
Merge pull request #251 from mozilla/oss-fuzz-5641604844748800
Preallocate storage when parsing iref box and add debugging output
2 parents 32775cc + 379151c commit 7a0b275

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

mp4parse/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ travis-ci = { repository = "https://github.com/mozilla/mp4parse-rust" }
2727
[dependencies]
2828
byteorder = "1.2.1"
2929
bitreader = { version = "0.3.2" }
30+
env_logger = "0.7.1"
3031
fallible_collections = { version = "0.3", features = ["std_io"] }
3132
hashbrown = "0.9"
3233
num-traits = "=0.2.10"
@@ -35,7 +36,6 @@ static_assertions = "1.1.0"
3536

3637
[dev-dependencies]
3738
test-assembler = "0.1.2"
38-
env_logger = "0.7.1"
3939
walkdir = "2.3.1"
4040
criterion = "0.3"
4141

mp4parse/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1222,6 +1222,8 @@ fn skip_box_remain<T: Read>(src: &mut BMFFBox<T>) -> Result<()> {
12221222
/// Metadata is accumulated in the passed-through `AvifContext` struct,
12231223
/// which can be examined later.
12241224
pub fn read_avif<T: Read>(f: &mut T, context: &mut AvifContext) -> Result<()> {
1225+
let _ = env_logger::try_init();
1226+
12251227
let mut f = OffsetReader::new(f);
12261228

12271229
let mut iter = BoxIter::new(&mut f);
@@ -1242,6 +1244,7 @@ pub fn read_avif<T: Read>(f: &mut T, context: &mut AvifContext) -> Result<()> {
12421244
let mut mdats = TryVec::new();
12431245

12441246
while let Some(mut b) = iter.next_box()? {
1247+
trace!("read_avif parsing {:?} box", b.head.name);
12451248
match b.head.name {
12461249
BoxType::MetadataBox => {
12471250
if meta.is_some() {
@@ -1359,6 +1362,7 @@ fn read_avif_meta<T: Read + Offset>(src: &mut BMFFBox<T>) -> Result<AvifMeta> {
13591362

13601363
let mut iter = src.box_iter();
13611364
while let Some(mut b) = iter.next_box()? {
1365+
trace!("read_avif_meta parsing {:?} box", b.head.name);
13621366
match b.head.name {
13631367
BoxType::ItemInfoBox => {
13641368
if item_infos.is_some() {
@@ -1529,12 +1533,14 @@ fn read_iref<T: Read>(src: &mut BMFFBox<T>) -> Result<TryVec<SingleItemTypeRefer
15291533

15301534
let mut iter = src.box_iter();
15311535
while let Some(mut b) = iter.next_box()? {
1536+
trace!("read_iref parsing {:?} referenceType", b.head.name);
15321537
let from_item_id = if version == 0 {
15331538
be_u16(&mut b)?.into()
15341539
} else {
15351540
be_u32(&mut b)?
15361541
};
15371542
let reference_count = be_u16(&mut b)?;
1543+
item_references.reserve(reference_count.to_usize())?;
15381544
for _ in 0..reference_count {
15391545
let to_item_id = if version == 0 {
15401546
be_u16(&mut b)?.into()

mp4parse/tests/public.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -663,8 +663,6 @@ fn public_avif_primary_item_is_grid() {
663663

664664
#[test]
665665
fn public_avif_read_samples() {
666-
env_logger::init();
667-
668666
for entry in walkdir::WalkDir::new(AVIF_TEST_DIR) {
669667
let entry = entry.expect("AVIF entry");
670668
let path = entry.path();

0 commit comments

Comments
 (0)