summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-11-11 23:02:08 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-11-11 23:07:57 +0100
commit0356ea76bac908c61160d735f078437ace953bd3 (patch)
tree682348a5ecbe0fcdfca47229da239e5cec9ddf6d
parentf417f056c5274c96b4176d5fbeede2cf2e2f699e (diff)
downloadlibtiff-git-0356ea76bac908c61160d735f078437ace953bd3.tar.gz
OJPEG: fix broken sanity check added in 4.1.0, and add two OJPEG test files
-rw-r--r--libtiff/tif_ojpeg.c53
-rw-r--r--test/CMakeLists.txt8
-rw-r--r--test/Makefile.am9
-rw-r--r--test/images/ojpeg_chewey_subsamp21_multi_strip.tiffbin0 -> 39752 bytes
-rw-r--r--test/images/ojpeg_zackthecat_subsamp22_single_strip.tiffbin0 -> 8258 bytes
-rwxr-xr-xtest/tiff2bw-ojpeg_chewey_subsamp21_multi_strip.sh7
-rwxr-xr-xtest/tiff2bw-ojpeg_zackthecat_subsamp22_single_strip.sh7
-rwxr-xr-xtest/tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh7
-rwxr-xr-xtest/tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh7
-rwxr-xr-xtest/tiffcrop-R90-ojpeg_chewey_subsamp21_multi_strip.sh7
-rwxr-xr-xtest/tiffcrop-R90-ojpeg_zackthecat_subsamp22_single_strip.sh7
-rwxr-xr-xtest/tiffcrop-doubleflip-ojpeg_chewey_subsamp21_multi_strip.sh7
-rwxr-xr-xtest/tiffcrop-doubleflip-ojpeg_zackthecat_subsamp22_single_strip.sh7
-rwxr-xr-xtest/tiffcrop-extract-ojpeg_chewey_subsamp21_multi_strip.sh7
-rwxr-xr-xtest/tiffcrop-extract-ojpeg_zackthecat_subsamp22_single_strip.sh7
-rwxr-xr-xtest/tiffcrop-extractz14-ojpeg_chewey_subsamp21_multi_strip.sh7
-rwxr-xr-xtest/tiffcrop-extractz14-ojpeg_zackthecat_subsamp22_single_strip.sh7
17 files changed, 120 insertions, 34 deletions
diff --git a/libtiff/tif_ojpeg.c b/libtiff/tif_ojpeg.c
index bf0d1a2a..d6f7d97e 100644
--- a/libtiff/tif_ojpeg.c
+++ b/libtiff/tif_ojpeg.c
@@ -837,36 +837,6 @@ OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc)
{
if (sp->subsampling_convert_state==0)
{
- const jpeg_decompress_struct* cinfo = &sp->libjpeg_jpeg_decompress_struct;
- int width = 0;
- int last_col_width = 0;
- int jpeg_bytes;
- int expected_bytes;
- int i;
- if (cinfo->MCUs_per_row == 0)
- {
- sp->error_in_raw_data_decoding = 1;
- return 0;
- }
- for (i = 0; i < cinfo->comps_in_scan; ++i)
- {
- const jpeg_component_info* info = cinfo->cur_comp_info[i];
-#if JPEG_LIB_VERSION >= 70
- width += info->MCU_width * info->DCT_h_scaled_size;
- last_col_width += info->last_col_width * info->DCT_h_scaled_size;
-#else
- width += info->MCU_width * info->DCT_scaled_size;
- last_col_width += info->last_col_width * info->DCT_scaled_size;
-#endif
- }
- jpeg_bytes = (cinfo->MCUs_per_row - 1) * width + last_col_width;
- expected_bytes = sp->subsampling_convert_clinelenout * sp->subsampling_ver * sp->subsampling_hor;
- if (jpeg_bytes != expected_bytes)
- {
- TIFFErrorExt(tif->tif_clientdata,module,"Inconsistent number of MCU in codestream");
- sp->error_in_raw_data_decoding = 1;
- return(0);
- }
if (jpeg_read_raw_data_encap(sp,&(sp->libjpeg_jpeg_decompress_struct),sp->subsampling_convert_ycbcrimage,sp->subsampling_ver*8)==0)
{
sp->error_in_raw_data_decoding = 1;
@@ -1291,6 +1261,29 @@ OJPEGWriteHeaderInfo(TIFF* tif)
}
if (jpeg_start_decompress_encap(sp,&(sp->libjpeg_jpeg_decompress_struct))==0)
return(0);
+ if(sp->libjpeg_jpeg_decompress_struct.image_width != sp->strile_width ||
+ sp->libjpeg_jpeg_decompress_struct.image_height < sp->strile_length) {
+ TIFFErrorExt(tif->tif_clientdata,module,
+ "jpeg_start_decompress() returned image_width = %d "
+ "and image_height = %d, expected %d and %d",
+ sp->libjpeg_jpeg_decompress_struct.image_width,
+ sp->libjpeg_jpeg_decompress_struct.image_height,
+ sp->strile_width,
+ sp->strile_length);
+ return 0;
+ }
+ if(sp->libjpeg_jpeg_decompress_struct.max_h_samp_factor != sp->subsampling_hor ||
+ sp->libjpeg_jpeg_decompress_struct.max_v_samp_factor != sp->subsampling_ver) {
+ TIFFErrorExt(tif->tif_clientdata,module,
+ "jpeg_start_decompress() returned max_h_samp_factor = %d "
+ "and max_v_samp_factor = %d, expected %d and %d",
+ sp->libjpeg_jpeg_decompress_struct.max_h_samp_factor,
+ sp->libjpeg_jpeg_decompress_struct.max_v_samp_factor,
+ sp->subsampling_hor,
+ sp->subsampling_ver);
+ return 0;
+ }
+
sp->writeheader_done=1;
return(1);
}
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index a4216d56..c89bb824 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -105,7 +105,9 @@ set(TESTSCRIPTS
tiff2rgba-palette-1c-8b.sh
tiff2rgba-rgb-3c-16b.sh
tiff2rgba-rgb-3c-8b.sh
- tiff2rgba-quad-tile.jpg.sh)
+ tiff2rgba-quad-tile.jpg.sh
+ tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh
+ tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh)
# This list should contain all of the TIFF files in the 'images'
# subdirectory which are intended to be used as input images for
@@ -123,7 +125,9 @@ set(TIFFIMAGES
images/rgb-3c-8b.tiff
images/quad-tile.jpg.tiff
images/quad-lzw-compat.tiff
- images/lzw-single-strip.tiff)
+ images/lzw-single-strip.tiff
+ images/ojpeg_zackthecat_subsamp22_single_strip.tiff
+ images/ojpeg_chewey_subsamp21_multi_strip.tiff)
set(BMPIMAGES
images/palette-1c-8b.bmp
diff --git a/test/Makefile.am b/test/Makefile.am
index 90c2f3d1..420d7523 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -55,7 +55,10 @@ CLEANFILES = test_packbits.tif o-*
if HAVE_JPEG
JPEG_DEPENDENT_CHECK_PROG=raw_decode
JPEG_DEPENDENT_TESTSCRIPTS=\
- tiff2rgba-quad-tile.jpg.sh
+ tiff2rgba-quad-tile.jpg.sh \
+ tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh \
+ tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh
+
else
JPEG_DEPENDENT_CHECK_PROG=
JPEG_DEPENDENT_TESTSCRIPTS=
@@ -171,7 +174,9 @@ TIFFIMAGES = \
images/rgb-3c-8b.tiff \
images/quad-tile.jpg.tiff \
images/quad-lzw-compat.tiff \
- images/lzw-single-strip.tiff
+ images/lzw-single-strip.tiff \
+ images/ojpeg_zackthecat_subsamp22_single_strip.tiff \
+ images/ojpeg_chewey_subsamp21_multi_strip.tiff
PNMIMAGES = \
images/minisblack-1c-8b.pgm \
diff --git a/test/images/ojpeg_chewey_subsamp21_multi_strip.tiff b/test/images/ojpeg_chewey_subsamp21_multi_strip.tiff
new file mode 100644
index 00000000..8b04d473
--- /dev/null
+++ b/test/images/ojpeg_chewey_subsamp21_multi_strip.tiff
Binary files differ
diff --git a/test/images/ojpeg_zackthecat_subsamp22_single_strip.tiff b/test/images/ojpeg_zackthecat_subsamp22_single_strip.tiff
new file mode 100644
index 00000000..15185b68
--- /dev/null
+++ b/test/images/ojpeg_zackthecat_subsamp22_single_strip.tiff
Binary files differ
diff --git a/test/tiff2bw-ojpeg_chewey_subsamp21_multi_strip.sh b/test/tiff2bw-ojpeg_chewey_subsamp21_multi_strip.sh
new file mode 100755
index 00000000..61a2ccf5
--- /dev/null
+++ b/test/tiff2bw-ojpeg_chewey_subsamp21_multi_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_chewey_subsamp21_multi_strip.tiff"
+outfile="o-tiff2bw-ojpeg_chewey_subsamp21_multi_strip.tiff"
+f_test_convert "$TIFF2BW" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiff2bw-ojpeg_zackthecat_subsamp22_single_strip.sh b/test/tiff2bw-ojpeg_zackthecat_subsamp22_single_strip.sh
new file mode 100755
index 00000000..7b09ded9
--- /dev/null
+++ b/test/tiff2bw-ojpeg_zackthecat_subsamp22_single_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_zackthecat_subsamp22_single_strip.tiff"
+outfile="o-tiff2bw-ojpeg_zackthecat_subsamp22_single_strip.tiff"
+f_test_convert "$TIFF2BW" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh b/test/tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh
new file mode 100755
index 00000000..d1225c94
--- /dev/null
+++ b/test/tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_chewey_subsamp21_multi_strip.tiff"
+outfile="o-tiff2rgba-ojpeg_chewey_subsamp21_multi_strip.tiff"
+f_test_convert "$TIFF2RGBA" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh b/test/tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh
new file mode 100755
index 00000000..ca23a12d
--- /dev/null
+++ b/test/tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_zackthecat_subsamp22_single_strip.tiff"
+outfile="o-tiff2rgba-ojpeg_zackthecat_subsamp22_single_strip.tiff"
+f_test_convert "$TIFF2RGBA" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-R90-ojpeg_chewey_subsamp21_multi_strip.sh b/test/tiffcrop-R90-ojpeg_chewey_subsamp21_multi_strip.sh
new file mode 100755
index 00000000..41df587d
--- /dev/null
+++ b/test/tiffcrop-R90-ojpeg_chewey_subsamp21_multi_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_chewey_subsamp21_multi_strip.tiff"
+outfile="o-tiffcrop-R90-ojpeg_chewey_subsamp21_multi_strip.tiff"
+f_test_convert "$TIFFCROP -R90" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-R90-ojpeg_zackthecat_subsamp22_single_strip.sh b/test/tiffcrop-R90-ojpeg_zackthecat_subsamp22_single_strip.sh
new file mode 100755
index 00000000..61f8fc41
--- /dev/null
+++ b/test/tiffcrop-R90-ojpeg_zackthecat_subsamp22_single_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_zackthecat_subsamp22_single_strip.tiff"
+outfile="o-tiffcrop-R90-ojpeg_zackthecat_subsamp22_single_strip.tiff"
+f_test_convert "$TIFFCROP -R90" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-doubleflip-ojpeg_chewey_subsamp21_multi_strip.sh b/test/tiffcrop-doubleflip-ojpeg_chewey_subsamp21_multi_strip.sh
new file mode 100755
index 00000000..3196ae1d
--- /dev/null
+++ b/test/tiffcrop-doubleflip-ojpeg_chewey_subsamp21_multi_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_chewey_subsamp21_multi_strip.tiff"
+outfile="o-tiffcrop-doubleflip-ojpeg_chewey_subsamp21_multi_strip.tiff"
+f_test_convert "$TIFFCROP -F both" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-doubleflip-ojpeg_zackthecat_subsamp22_single_strip.sh b/test/tiffcrop-doubleflip-ojpeg_zackthecat_subsamp22_single_strip.sh
new file mode 100755
index 00000000..6ce71d4f
--- /dev/null
+++ b/test/tiffcrop-doubleflip-ojpeg_zackthecat_subsamp22_single_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_zackthecat_subsamp22_single_strip.tiff"
+outfile="o-tiffcrop-doubleflip-ojpeg_zackthecat_subsamp22_single_strip.tiff"
+f_test_convert "$TIFFCROP -F both" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-extract-ojpeg_chewey_subsamp21_multi_strip.sh b/test/tiffcrop-extract-ojpeg_chewey_subsamp21_multi_strip.sh
new file mode 100755
index 00000000..bb30f9bd
--- /dev/null
+++ b/test/tiffcrop-extract-ojpeg_chewey_subsamp21_multi_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_chewey_subsamp21_multi_strip.tiff"
+outfile="o-tiffcrop-extract-ojpeg_chewey_subsamp21_multi_strip.tiff"
+f_test_convert "$TIFFCROP -U px -E top -X 60 -Y 60" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-extract-ojpeg_zackthecat_subsamp22_single_strip.sh b/test/tiffcrop-extract-ojpeg_zackthecat_subsamp22_single_strip.sh
new file mode 100755
index 00000000..ce06a261
--- /dev/null
+++ b/test/tiffcrop-extract-ojpeg_zackthecat_subsamp22_single_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_zackthecat_subsamp22_single_strip.tiff"
+outfile="o-tiffcrop-extract-ojpeg_zackthecat_subsamp22_single_strip.tiff"
+f_test_convert "$TIFFCROP -U px -E top -X 60 -Y 60" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-extractz14-ojpeg_chewey_subsamp21_multi_strip.sh b/test/tiffcrop-extractz14-ojpeg_chewey_subsamp21_multi_strip.sh
new file mode 100755
index 00000000..81d66249
--- /dev/null
+++ b/test/tiffcrop-extractz14-ojpeg_chewey_subsamp21_multi_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_chewey_subsamp21_multi_strip.tiff"
+outfile="o-tiffcrop-extractz14-ojpeg_chewey_subsamp21_multi_strip.tiff"
+f_test_convert "$TIFFCROP -E left -Z1:4,2:4" $infile $outfile
+f_tiffinfo_validate $outfile
diff --git a/test/tiffcrop-extractz14-ojpeg_zackthecat_subsamp22_single_strip.sh b/test/tiffcrop-extractz14-ojpeg_zackthecat_subsamp22_single_strip.sh
new file mode 100755
index 00000000..e6c3c5f3
--- /dev/null
+++ b/test/tiffcrop-extractz14-ojpeg_zackthecat_subsamp22_single_strip.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Generated file, master is Makefile.am
+. ${srcdir:-.}/common.sh
+infile="$srcdir/images/ojpeg_zackthecat_subsamp22_single_strip.tiff"
+outfile="o-tiffcrop-extractz14-ojpeg_zackthecat_subsamp22_single_strip.tiff"
+f_test_convert "$TIFFCROP -E left -Z1:4,2:4" $infile $outfile
+f_tiffinfo_validate $outfile