Skip to content

Commit 2b572e8

Browse files
Zaggy1024kinetiknz
authored andcommitted
Don't panic when a box's size is smaller than its header.
1 parent 40763b6 commit 2b572e8

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

mp4parse/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2422,7 +2422,7 @@ fn skip_box_content<T: Read>(src: &mut BMFFBox<T>) -> Result<()> {
24222422
header
24232423
.size
24242424
.checked_sub(header.offset)
2425-
.expect("header offset > size")
2425+
.ok_or(Error::Unsupported("Skipping past unknown sized box"))?
24262426
};
24272427
assert_eq!(to_skip, src.bytes_left());
24282428
skip(src, to_skip)

mp4parse/tests/public.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ static IMAGE_AVIF_IROT_MISSING_ESSENTIAL: &str = "tests/irot-missing-essential.a
6666
static IMAGE_AVIF_LSEL_MISSING_ESSENTIAL: &str = "tests/corrupt/lsel-missing-essential.avif";
6767
static IMAGE_AVIF_CLAP_MISSING_ESSENTIAL: &str = "tests/clap-missing-essential.avif";
6868
static IMAGE_AVIF_UNKNOWN_MDAT_SIZE: &str = "tests/unknown_mdat.avif";
69+
static IMAGE_AVIF_UNKNOWN_MDAT_SIZE_IN_OVERSIZED_META: &str =
70+
"tests/unknown_mdat_in_oversized_meta.avif";
6971
static AVIF_TEST_DIRS: &[&str] = &["tests", "av1-avif/testFiles", "link-u-avif-sample-images"];
7072

7173
// These files are
@@ -124,6 +126,7 @@ static AVIF_UNSUPPORTED_IMAGES: &[&str] = &[
124126
/// and https://github.com/AOMediaCodec/av1-avif/issues/178
125127
// TODO: make this into a map of expected errors?
126128
static AV1_AVIF_CORRUPT_IMAGES: &[&str] = &[
129+
IMAGE_AVIF_UNKNOWN_MDAT_SIZE_IN_OVERSIZED_META,
127130
"av1-avif/testFiles/Link-U/kimono.crop.avif",
128131
"av1-avif/testFiles/Link-U/kimono.mirror-horizontal.avif",
129132
"av1-avif/testFiles/Link-U/kimono.mirror-vertical.avif",
@@ -926,6 +929,16 @@ fn public_avif_unknown_mdat() {
926929
);
927930
}
928931

932+
#[test]
933+
fn public_avif_unknown_mdat_in_oversized_meta() {
934+
let input =
935+
&mut File::open(IMAGE_AVIF_UNKNOWN_MDAT_SIZE_IN_OVERSIZED_META).expect("Unknown file");
936+
assert_eq!(
937+
Status::from(mp4::read_avif(input, ParseStrictness::Normal)),
938+
Status::Unsupported
939+
);
940+
}
941+
929942
#[test]
930943
fn public_avif_bug_1655846() {
931944
let input = &mut File::open(IMAGE_AVIF_CORRUPT).expect("Unknown file");
Binary file not shown.

0 commit comments

Comments
 (0)