diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs index fd7e0eb..172dcf5 100644 --- a/src/decoder/mod.rs +++ b/src/decoder/mod.rs @@ -612,6 +612,10 @@ impl Decoder { .get_tag_u32(ifd::Tag::RowsPerStrip) .unwrap_or(self.height); + if rows_per_strip == 0 { + return Ok(0); + } + Ok((self.height + rows_per_strip - 1) / rows_per_strip) } diff --git a/tests/fuzz_images/divide_by_zero/id:000000,sig:06,src:000036,op:havoc,rep:4 b/tests/fuzz_images/divide_by_zero/id:000000,sig:06,src:000036,op:havoc,rep:4 new file mode 100644 index 0000000..0cd21be Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000000,sig:06,src:000036,op:havoc,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000001,sig:06,src:000044,op:havoc,rep:64 b/tests/fuzz_images/divide_by_zero/id:000001,sig:06,src:000044,op:havoc,rep:64 new file mode 100644 index 0000000..8cf08dc Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000001,sig:06,src:000044,op:havoc,rep:64 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000002,sig:06,src:000096,op:havoc,rep:16 b/tests/fuzz_images/divide_by_zero/id:000002,sig:06,src:000096,op:havoc,rep:16 new file mode 100644 index 0000000..eb0951b Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000002,sig:06,src:000096,op:havoc,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000003,sig:06,src:000297,op:havoc,rep:16 b/tests/fuzz_images/divide_by_zero/id:000003,sig:06,src:000297,op:havoc,rep:16 new file mode 100644 index 0000000..07504ec Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000003,sig:06,src:000297,op:havoc,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000004,sig:06,src:000297,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000004,sig:06,src:000297,op:havoc,rep:8 new file mode 100644 index 0000000..eacfe1d Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000004,sig:06,src:000297,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000005,sig:06,src:000301,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000005,sig:06,src:000301,op:havoc,rep:8 new file mode 100644 index 0000000..f6dbb87 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000005,sig:06,src:000301,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000006,sig:06,src:000030+000036,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000006,sig:06,src:000030+000036,op:splice,rep:4 new file mode 100644 index 0000000..a525d54 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000006,sig:06,src:000030+000036,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000007,sig:06,src:000083+000275,op:splice,rep:8 b/tests/fuzz_images/divide_by_zero/id:000007,sig:06,src:000083+000275,op:splice,rep:8 new file mode 100644 index 0000000..cdf6f23 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000007,sig:06,src:000083+000275,op:splice,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000008,sig:06,src:000324,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000008,sig:06,src:000324,op:havoc,rep:8 new file mode 100644 index 0000000..0dae60a Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000008,sig:06,src:000324,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000009,sig:06,src:000149,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000009,sig:06,src:000149,op:havoc,rep:8 new file mode 100644 index 0000000..d0d6439 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000009,sig:06,src:000149,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000010,sig:06,src:000036,op:havoc,rep:16 b/tests/fuzz_images/divide_by_zero/id:000010,sig:06,src:000036,op:havoc,rep:16 new file mode 100644 index 0000000..b619fb6 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000010,sig:06,src:000036,op:havoc,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000011,sig:06,src:000140,op:havoc,rep:16 b/tests/fuzz_images/divide_by_zero/id:000011,sig:06,src:000140,op:havoc,rep:16 new file mode 100644 index 0000000..3c8e731 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000011,sig:06,src:000140,op:havoc,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000012,sig:06,src:000140+000054,op:splice,rep:2 b/tests/fuzz_images/divide_by_zero/id:000012,sig:06,src:000140+000054,op:splice,rep:2 new file mode 100644 index 0000000..1d133c8 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000012,sig:06,src:000140+000054,op:splice,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000013,sig:06,src:000232,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000013,sig:06,src:000232,op:havoc,rep:2 new file mode 100644 index 0000000..2460198 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000013,sig:06,src:000232,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000014,sig:06,src:000295,op:havoc,rep:16 b/tests/fuzz_images/divide_by_zero/id:000014,sig:06,src:000295,op:havoc,rep:16 new file mode 100644 index 0000000..0b1fd3d Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000014,sig:06,src:000295,op:havoc,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000015,sig:06,src:000337,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000015,sig:06,src:000337,op:havoc,rep:2 new file mode 100644 index 0000000..cd71939 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000015,sig:06,src:000337,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000016,sig:06,src:000034+000323,op:splice,rep:64 b/tests/fuzz_images/divide_by_zero/id:000016,sig:06,src:000034+000323,op:splice,rep:64 new file mode 100644 index 0000000..84c24e4 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000016,sig:06,src:000034+000323,op:splice,rep:64 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000017,sig:06,src:000044+000234,op:splice,rep:2 b/tests/fuzz_images/divide_by_zero/id:000017,sig:06,src:000044+000234,op:splice,rep:2 new file mode 100644 index 0000000..76313ee Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000017,sig:06,src:000044+000234,op:splice,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000018,sig:06,src:000342,op:havoc,rep:4 b/tests/fuzz_images/divide_by_zero/id:000018,sig:06,src:000342,op:havoc,rep:4 new file mode 100644 index 0000000..e98d173 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000018,sig:06,src:000342,op:havoc,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000019,sig:06,src:000346+000147,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000019,sig:06,src:000346+000147,op:splice,rep:4 new file mode 100644 index 0000000..0492d82 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000019,sig:06,src:000346+000147,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000020,sig:06,src:000351,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000020,sig:06,src:000351,op:havoc,rep:2 new file mode 100644 index 0000000..a145ed2 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000020,sig:06,src:000351,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000021,sig:06,src:000036+000170,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000021,sig:06,src:000036+000170,op:splice,rep:4 new file mode 100644 index 0000000..7a24bc3 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000021,sig:06,src:000036+000170,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000022,sig:06,src:000036+000170,op:splice,rep:8 b/tests/fuzz_images/divide_by_zero/id:000022,sig:06,src:000036+000170,op:splice,rep:8 new file mode 100644 index 0000000..1cad3b3 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000022,sig:06,src:000036+000170,op:splice,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000023,sig:06,src:000124+000267,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000023,sig:06,src:000124+000267,op:splice,rep:4 new file mode 100644 index 0000000..af605b2 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000023,sig:06,src:000124+000267,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000024,sig:06,src:000183+000196,op:splice,rep:2 b/tests/fuzz_images/divide_by_zero/id:000024,sig:06,src:000183+000196,op:splice,rep:2 new file mode 100644 index 0000000..0eba632 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000024,sig:06,src:000183+000196,op:splice,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000025,sig:06,src:000228,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000025,sig:06,src:000228,op:havoc,rep:8 new file mode 100644 index 0000000..f91a3d7 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000025,sig:06,src:000228,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000026,sig:06,src:000291,op:havoc,rep:4 b/tests/fuzz_images/divide_by_zero/id:000026,sig:06,src:000291,op:havoc,rep:4 new file mode 100644 index 0000000..aa5e04c Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000026,sig:06,src:000291,op:havoc,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000027,sig:06,src:000348+000170,op:splice,rep:64 b/tests/fuzz_images/divide_by_zero/id:000027,sig:06,src:000348+000170,op:splice,rep:64 new file mode 100644 index 0000000..7e78a9c Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000027,sig:06,src:000348+000170,op:splice,rep:64 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000028,sig:06,src:000306,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000028,sig:06,src:000306,op:havoc,rep:2 new file mode 100644 index 0000000..09fa68e Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000028,sig:06,src:000306,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000029,sig:06,src:000354,op:havoc,rep:32 b/tests/fuzz_images/divide_by_zero/id:000029,sig:06,src:000354,op:havoc,rep:32 new file mode 100644 index 0000000..67e1827 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000029,sig:06,src:000354,op:havoc,rep:32 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000030,sig:06,src:000005,op:havoc,rep:4 b/tests/fuzz_images/divide_by_zero/id:000030,sig:06,src:000005,op:havoc,rep:4 new file mode 100644 index 0000000..92c5e0f Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000030,sig:06,src:000005,op:havoc,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000031,sig:06,src:000018,op:havoc,rep:32 b/tests/fuzz_images/divide_by_zero/id:000031,sig:06,src:000018,op:havoc,rep:32 new file mode 100644 index 0000000..7f90cc9 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000031,sig:06,src:000018,op:havoc,rep:32 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000032,sig:06,src:000172,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000032,sig:06,src:000172,op:havoc,rep:2 new file mode 100644 index 0000000..12f16c0 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000032,sig:06,src:000172,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000033,sig:06,src:000227+000161,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000033,sig:06,src:000227+000161,op:splice,rep:4 new file mode 100644 index 0000000..70e00ed Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000033,sig:06,src:000227+000161,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000034,sig:06,src:000347,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000034,sig:06,src:000347,op:havoc,rep:2 new file mode 100644 index 0000000..099f672 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000034,sig:06,src:000347,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000035,sig:06,src:000337+000005,op:splice,rep:2 b/tests/fuzz_images/divide_by_zero/id:000035,sig:06,src:000337+000005,op:splice,rep:2 new file mode 100644 index 0000000..708faaa Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000035,sig:06,src:000337+000005,op:splice,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000036,sig:06,src:000301,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000036,sig:06,src:000301,op:havoc,rep:2 new file mode 100644 index 0000000..c55df73 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000036,sig:06,src:000301,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000037,sig:06,src:000365,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000037,sig:06,src:000365,op:havoc,rep:8 new file mode 100644 index 0000000..90170d2 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000037,sig:06,src:000365,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000038,sig:06,src:000036,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000038,sig:06,src:000036,op:havoc,rep:2 new file mode 100644 index 0000000..61ef465 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000038,sig:06,src:000036,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000039,sig:06,src:000298,op:havoc,rep:8 b/tests/fuzz_images/divide_by_zero/id:000039,sig:06,src:000298,op:havoc,rep:8 new file mode 100644 index 0000000..72acf30 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000039,sig:06,src:000298,op:havoc,rep:8 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000040,sig:06,src:000112+000100,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000040,sig:06,src:000112+000100,op:splice,rep:4 new file mode 100644 index 0000000..2f49476 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000040,sig:06,src:000112+000100,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000041,sig:06,src:000015+000098,op:splice,rep:16 b/tests/fuzz_images/divide_by_zero/id:000041,sig:06,src:000015+000098,op:splice,rep:16 new file mode 100644 index 0000000..684ad63 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000041,sig:06,src:000015+000098,op:splice,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000042,sig:06,src:000036,op:havoc,rep:4 b/tests/fuzz_images/divide_by_zero/id:000042,sig:06,src:000036,op:havoc,rep:4 new file mode 100644 index 0000000..6fecaa3 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000042,sig:06,src:000036,op:havoc,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000043,sig:06,src:000286,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000043,sig:06,src:000286,op:havoc,rep:2 new file mode 100644 index 0000000..aa56dce Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000043,sig:06,src:000286,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000044,sig:06,src:000369,op:havoc,rep:16 b/tests/fuzz_images/divide_by_zero/id:000044,sig:06,src:000369,op:havoc,rep:16 new file mode 100644 index 0000000..e7b6475 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000044,sig:06,src:000369,op:havoc,rep:16 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000045,sig:06,src:000036+000373,op:splice,rep:4 b/tests/fuzz_images/divide_by_zero/id:000045,sig:06,src:000036+000373,op:splice,rep:4 new file mode 100644 index 0000000..27f44f2 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000045,sig:06,src:000036+000373,op:splice,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000046,sig:06,src:000171,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000046,sig:06,src:000171,op:havoc,rep:2 new file mode 100644 index 0000000..c973fe8 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000046,sig:06,src:000171,op:havoc,rep:2 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000047,sig:06,src:000370,op:havoc,rep:4 b/tests/fuzz_images/divide_by_zero/id:000047,sig:06,src:000370,op:havoc,rep:4 new file mode 100644 index 0000000..ed92f8a Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000047,sig:06,src:000370,op:havoc,rep:4 differ diff --git a/tests/fuzz_images/divide_by_zero/id:000048,sig:06,src:000414,op:havoc,rep:2 b/tests/fuzz_images/divide_by_zero/id:000048,sig:06,src:000414,op:havoc,rep:2 new file mode 100644 index 0000000..918c1d8 Binary files /dev/null and b/tests/fuzz_images/divide_by_zero/id:000048,sig:06,src:000414,op:havoc,rep:2 differ diff --git a/tests/fuzz_tests.rs b/tests/fuzz_tests.rs index db126a6..bef4f08 100644 --- a/tests/fuzz_tests.rs +++ b/tests/fuzz_tests.rs @@ -40,3 +40,12 @@ fn inf_loop() { true }); } + +// https://github.com/image-rs/image-tiff/issues/33 +#[test] +fn divide_by_zero() { + test_directory("./tests/fuzz_images/divide_by_zero", |file| { + decode_tiff(file).ok(); + true + }); +}