Skip to content

Commit cf8b0e0

Browse files
authored
Merge pull request #403 from kinetiknz/partial_revert_eof_handling
Move UnexpectedEOF handling back to the BoxIter.
2 parents 7f32e34 + 6df62a4 commit cf8b0e0

File tree

3 files changed

+11
-12
lines changed

3 files changed

+11
-12
lines changed

mp4parse/src/lib.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,11 +2273,11 @@ impl<'a, T: Read> BoxIter<'a, T> {
22732273
fn next_box(&mut self) -> Result<Option<BMFFBox<T>>> {
22742274
let r = read_box_header(self.src);
22752275
match r {
2276-
Ok(Some(h)) => Ok(Some(BMFFBox {
2276+
Ok(h) => Ok(Some(BMFFBox {
22772277
head: h,
22782278
content: self.src.take(h.size.saturating_sub(h.offset)),
22792279
})),
2280-
Ok(None) => Ok(None),
2280+
Err(Error::UnexpectedEOF) => Ok(None),
22812281
Err(e) => Err(e),
22822282
}
22832283
}
@@ -2332,10 +2332,9 @@ impl<'a, T> Drop for BMFFBox<'a, T> {
23322332
/// skip unknown or uninteresting boxes.
23332333
///
23342334
/// See ISOBMFF (ISO 14496-12:2020) § 4.2
2335-
fn read_box_header<T: ReadBytesExt>(src: &mut T) -> Result<Option<BoxHeader>> {
2335+
fn read_box_header<T: ReadBytesExt>(src: &mut T) -> Result<BoxHeader> {
23362336
let size32 = match be_u32(src) {
23372337
Ok(v) => v,
2338-
Err(Error::UnexpectedEOF) => return Ok(None),
23392338
Err(error) => return Err(error),
23402339
};
23412340
let name = BoxType::from(be_u32(src)?);
@@ -2379,12 +2378,12 @@ fn read_box_header<T: ReadBytesExt>(src: &mut T) -> Result<Option<BoxHeader>> {
23792378
_ if offset > size => return Err(Error::from(Status::BoxBadSize)),
23802379
_ => (),
23812380
}
2382-
Ok(Some(BoxHeader {
2381+
Ok(BoxHeader {
23832382
name,
23842383
size,
23852384
offset,
23862385
uuid,
2387-
}))
2386+
})
23882387
}
23892388

23902389
/// Parse the extra header fields for a full box.

mp4parse/src/tests.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ where
9393
#[test]
9494
fn read_box_header_short() {
9595
let mut stream = make_box(BoxSize::Short(8), b"test", |s| s);
96-
let header = super::read_box_header(&mut stream).unwrap().unwrap();
96+
let header = super::read_box_header(&mut stream).unwrap();
9797
assert_eq!(header.name, BoxType::UnknownBox(0x7465_7374)); // "test"
9898
assert_eq!(header.size, 8);
9999
assert!(header.uuid.is_none());
@@ -102,7 +102,7 @@ fn read_box_header_short() {
102102
#[test]
103103
fn read_box_header_long() {
104104
let mut stream = make_box(BoxSize::Long(16), b"test", |s| s);
105-
let header = super::read_box_header(&mut stream).unwrap().unwrap();
105+
let header = super::read_box_header(&mut stream).unwrap();
106106
assert_eq!(header.name, BoxType::UnknownBox(0x7465_7374)); // "test"
107107
assert_eq!(header.size, 16);
108108
assert!(header.uuid.is_none());
@@ -177,9 +177,9 @@ fn read_box_header_uuid_past_eof() {
177177
let mut cursor = Cursor::new(HEADER_UUID);
178178
let mut iter = super::BoxIter::new(&mut cursor);
179179
match iter.next_box() {
180-
Err(Error::UnexpectedEOF) => (),
181-
Ok(_) => panic!("expected an error result"),
182-
_ => panic!("expected a different error result"),
180+
Ok(None) => (),
181+
Ok(_) => panic!("unexpected box read"),
182+
_ => panic!("unexpected error"),
183183
};
184184
}
185185

mp4parse/tests/public.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1294,7 +1294,7 @@ fn public_avif_valid_with_garbage_overread_at_end() {
12941294

12951295
#[test]
12961296
fn public_avif_valid_with_garbage_byte_at_end() {
1297-
assert_avif_should(IMAGE_AVIF_VALID_WITH_GARBAGE_BYTE_AT_END, Status::Eof);
1297+
assert_avif_should(IMAGE_AVIF_VALID_WITH_GARBAGE_BYTE_AT_END, Status::Ok);
12981298
}
12991299

13001300
#[test]

0 commit comments

Comments
 (0)