4
4
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
5
extern crate mp4parse as mp4;
6
6
7
+ use mp4:: Error ;
7
8
use std:: convert:: TryInto ;
8
9
use std:: fs:: File ;
9
10
use std:: io:: { Cursor , Read } ;
@@ -29,11 +30,12 @@ static VIDEO_EME_CBCS_MP4: &str = "tests/bipbop_cbcs_video_init.mp4";
29
30
static VIDEO_AV1_MP4 : & str = "tests/tiny_av1.mp4" ;
30
31
static IMAGE_AVIF : & str = "av1-avif/testFiles/Microsoft/Monochrome.avif" ;
31
32
static IMAGE_AVIF_EXTENTS : & str = "tests/kodim-extents.avif" ;
32
- static IMAGE_AVIF_CORRUPT : & str = "tests/bug-1655846.avif" ;
33
- static IMAGE_AVIF_CORRUPT_2 : & str = "tests/bug-1661347.avif" ;
33
+ static IMAGE_AVIF_CORRUPT : & str = "tests/corrupt/bug-1655846.avif" ;
34
+ static IMAGE_AVIF_CORRUPT_2 : & str = "tests/corrupt/bug-1661347.avif" ;
35
+ static IMAGE_AVIF_CORRUPT_3 : & str = "tests/corrupt/bad-ipma-version.avif" ;
34
36
static IMAGE_AVIF_GRID : & str = "av1-avif/testFiles/Microsoft/Summer_in_Tomsk_720p_5x4_grid.avif" ;
35
37
static AVIF_TEST_DIRS : & [ & str ] = & [ "tests" , "av1-avif/testFiles" ] ;
36
- static AVIF_CORRUPT_IMAGES : & [ & str ] = & [ IMAGE_AVIF_CORRUPT , IMAGE_AVIF_CORRUPT_2 ] ;
38
+ static AVIF_CORRUPT_IMAGES : & str = "tests/corrupt" ;
37
39
38
40
// Adapted from https://github.com/GuillaumeGomez/audio-video-metadata/blob/9dff40f565af71d5502e03a2e78ae63df95cfd40/src/metadata.rs#L53
39
41
#[ test]
@@ -641,6 +643,19 @@ fn public_avif_bug_1661347() {
641
643
assert ! ( mp4:: read_avif( input) . is_err( ) ) ;
642
644
}
643
645
646
+ #[ test]
647
+ fn public_avif_bad_ipma_version ( ) {
648
+ let input = & mut File :: open ( IMAGE_AVIF_CORRUPT_3 ) . expect ( "Unknown file" ) ;
649
+ let expected_msg = "The version 0 should be used unless 32-bit item_ID values are needed" ;
650
+ match mp4:: read_avif ( input) {
651
+ Err ( Error :: InvalidData ( msg) ) if msg == expected_msg => { }
652
+ r => panic ! (
653
+ "Expected Err(Error::InvalidData({:?})), found {:?}" ,
654
+ expected_msg, r
655
+ ) ,
656
+ }
657
+ }
658
+
644
659
#[ test]
645
660
#[ ignore] // Remove when we add support; see https://github.com/mozilla/mp4parse-rust/issues/198
646
661
fn public_avif_primary_item_is_grid ( ) {
@@ -659,13 +674,7 @@ fn public_avif_read_samples() {
659
674
eprintln ! ( "Skipping {:?}" , path) ;
660
675
continue ; // Skip directories, ReadMe.txt, etc.
661
676
}
662
- if AVIF_CORRUPT_IMAGES
663
- . iter ( )
664
- . find ( |& & corrupt| {
665
- std:: fs:: canonicalize ( corrupt) . unwrap ( ) == path. canonicalize ( ) . unwrap ( )
666
- } )
667
- . is_some ( )
668
- {
677
+ if path. parent ( ) . unwrap ( ) == Path :: new ( AVIF_CORRUPT_IMAGES ) {
669
678
eprintln ! ( "Skipping {:?}" , path) ;
670
679
continue ;
671
680
}
0 commit comments