diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs index 4836c32..a2cd6a0 100644 --- a/src/decoder/mod.rs +++ b/src/decoder/mod.rs @@ -584,7 +584,7 @@ impl Decoder { let (bytes, reader) = LZWReader::new( &mut self.reader, usize::try_from(length)?, - max_uncompressed_length + max_uncompressed_length * buffer.byte_len() )?; (bytes, Box::new(reader)) } @@ -744,7 +744,7 @@ impl Decoder { let buffer_size = usize::try_from(self.width)? * strip_height * self.bits_per_sample.len(); - if buffer.len() < buffer_size || usize::try_from(byte_count)? / buffer.byte_len() > buffer_size { + if buffer.len() < buffer_size { return Err(TiffError::FormatError( TiffFormatError::InconsistentSizesEncountered, )); diff --git a/tests/decode_images.rs b/tests/decode_images.rs index 9fc8676..09685e3 100644 --- a/tests/decode_images.rs +++ b/tests/decode_images.rs @@ -149,6 +149,12 @@ fn test_decode_data() { } } +#[test] +fn issue_69() { + test_image_sum_u16("issue_69_lzw.tiff", ColorType::Gray(16), 1015486); + test_image_sum_u16("issue_69_packbits.tiff", ColorType::Gray(16), 1015486); +} + // TODO: GrayA support //#[test] //fn test_gray_alpha_u8() diff --git a/tests/images/issue_69_lzw.tiff b/tests/images/issue_69_lzw.tiff new file mode 100644 index 0000000..3870fc6 Binary files /dev/null and b/tests/images/issue_69_lzw.tiff differ diff --git a/tests/images/issue_69_packbits.tiff b/tests/images/issue_69_packbits.tiff new file mode 100644 index 0000000..224edc0 Binary files /dev/null and b/tests/images/issue_69_packbits.tiff differ