Skip to content

Commit a138e40

Browse files
authored
Merge pull request #416 from kinetiknz/mvhd_trailing
Ignore unused trailing data in `mvhd`.
2 parents 1e6e68f + 838dcc1 commit a138e40

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

mp4parse/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4517,8 +4517,11 @@ fn read_mvhd<T: Read>(src: &mut BMFFBox<T>) -> Result<MovieHeaderBox> {
45174517
}
45184518
_ => unreachable!("Should have returned Status::MvhdBadVersion"),
45194519
};
4520-
// Skip remaining fields.
4520+
// Skip remaining valid fields.
45214521
skip(src, 80)?;
4522+
4523+
// Padding could be added in some contents.
4524+
skip_box_remain(src)?;
45224525
Ok(MovieHeaderBox {
45234526
timescale,
45244527
duration,

mp4parse/src/tests.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,25 @@ fn read_mvhd_unknown_duration() {
423423
assert_eq!(parsed.duration, ::std::u64::MAX);
424424
}
425425

426+
#[test]
427+
fn read_mvhd_v0_trailing_data() {
428+
let mut stream = make_fullbox(BoxSize::Short(110), b"mvhd", 0, |s| {
429+
s.B32(0)
430+
.B32(0)
431+
.B32(1234)
432+
.B32(5678)
433+
.append_repeated(0, 80)
434+
.B16(0)
435+
});
436+
let mut iter = super::BoxIter::new(&mut stream);
437+
let mut stream = iter.next_box().unwrap().unwrap();
438+
assert_eq!(stream.head.name, BoxType::MovieHeaderBox);
439+
assert_eq!(stream.head.size, 110);
440+
let parsed = super::read_mvhd(&mut stream).unwrap();
441+
assert_eq!(parsed.timescale, 1234);
442+
assert_eq!(parsed.duration, 5678);
443+
}
444+
426445
#[test]
427446
fn read_vpcc_version_0() {
428447
let data_length = 12u16;

0 commit comments

Comments
 (0)