Update to libtiff 3.9.5
This commit is contained in:
		
							parent
							
								
									0224c9c3f8
								
							
						
					
					
						commit
						2444d4596f
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| tiff-3.9.4.tar.gz | /tiff-3.9.5.tar.gz | ||||||
|  | |||||||
| @ -1,21 +0,0 @@ | |||||||
| Patch for bug #603081: failure to guard against bogus SamplesPerPixel |  | ||||||
| when converting a YCbCr image to RGB. |  | ||||||
| 
 |  | ||||||
| This patch duplicates into PickContigCase() a safety check that already |  | ||||||
| existed in PickSeparateCase(). |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=2216 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.2.orig/libtiff/tif_getimage.c tiff-3.9.2/libtiff/tif_getimage.c
 |  | ||||||
| --- tiff-3.9.2.orig/libtiff/tif_getimage.c	2009-08-30 12:21:46.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.2/libtiff/tif_getimage.c	2010-06-11 12:06:47.000000000 -0400
 |  | ||||||
| @@ -2397,7 +2397,7 @@
 |  | ||||||
|  			} |  | ||||||
|  			break; |  | ||||||
|  		case PHOTOMETRIC_YCBCR: |  | ||||||
| -			if (img->bitspersample == 8)
 |  | ||||||
| +			if ((img->bitspersample==8) && (img->samplesperpixel==3))
 |  | ||||||
|  			{ |  | ||||||
|  				if (initYCbCrConversion(img)!=0) |  | ||||||
|  				{ |  | ||||||
| @ -1,27 +0,0 @@ | |||||||
| Protect against a fax VL(n) codeword commanding a move left.  Without |  | ||||||
| this, a malicious input file can generate an indefinitely large series |  | ||||||
| of runs without a0 ever reaching the right margin, thus overrunning |  | ||||||
| our buffer of run lengths.  Per CVE-2011-0192.  This is a modified |  | ||||||
| version of a patch proposed by Drew Yao of Apple Product Security. |  | ||||||
| It adds an unexpected() report, and disallows the equality case except |  | ||||||
| for the first run of a line, since emitting a run without increasing a0 |  | ||||||
| still allows buffer overrun.  (We have to allow it for the first run to |  | ||||||
| cover the case of encoding a zero-length run at start of line using VL.) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/libtiff/tif_fax3.h tiff-3.9.4/libtiff/tif_fax3.h
 |  | ||||||
| --- tiff-3.9.4.orig/libtiff/tif_fax3.h	2010-06-08 14:50:42.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/libtiff/tif_fax3.h	2011-03-10 12:11:20.850839162 -0500
 |  | ||||||
| @@ -478,6 +478,12 @@
 |  | ||||||
|  	    break;							\ |  | ||||||
|  	case S_VL:							\ |  | ||||||
|  	    CHECK_b1;							\ |  | ||||||
| +	    if (b1 <= (int) (a0 + TabEnt->Param)) {			\
 |  | ||||||
| +		if (b1 < (int) (a0 + TabEnt->Param) || pa != thisrun) {	\
 |  | ||||||
| +		    unexpected("VL", a0);				\
 |  | ||||||
| +		    goto eol2d;						\
 |  | ||||||
| +		}							\
 |  | ||||||
| +	    }								\
 |  | ||||||
|  	    SETVALUE(b1 - a0 - TabEnt->Param);				\ |  | ||||||
|  	    b1 -= *--pb;						\ |  | ||||||
|  	    break;							\ |  | ||||||
| @ -1,53 +0,0 @@ | |||||||
| Upstream patch for CVE-2011-1167, heap-based buffer overflow in thunder |  | ||||||
| decoder (ZDI-CAN-1004). |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/libtiff/tif_thunder.c tiff-3.9.4/libtiff/tif_thunder.c
 |  | ||||||
| --- tiff-3.9.4.orig/libtiff/tif_thunder.c	2010-06-08 14:50:43.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/libtiff/tif_thunder.c	2011-03-18 12:17:13.635796403 -0400
 |  | ||||||
| @@ -55,12 +55,32 @@
 |  | ||||||
|  static const int twobitdeltas[4] = { 0, 1, 0, -1 }; |  | ||||||
|  static const int threebitdeltas[8] = { 0, 1, 2, 3, 0, -3, -2, -1 }; |  | ||||||
|   |  | ||||||
| -#define	SETPIXEL(op, v) { \
 |  | ||||||
| -	lastpixel = (v) & 0xf; \
 |  | ||||||
| -	if (npixels++ & 1) \
 |  | ||||||
| -	    *op++ |= lastpixel; \
 |  | ||||||
| -	else \
 |  | ||||||
| +#define	SETPIXEL(op, v) {                     \
 |  | ||||||
| +	lastpixel = (v) & 0xf;                \
 |  | ||||||
| +        if ( npixels < maxpixels )         \
 |  | ||||||
| +        {                                     \
 |  | ||||||
| +	  if (npixels++ & 1)                  \
 |  | ||||||
| +	    *op++ |= lastpixel;               \
 |  | ||||||
| +	  else                                \
 |  | ||||||
|  	    op[0] = (tidataval_t) (lastpixel << 4); \ |  | ||||||
| +        }                                     \
 |  | ||||||
| +}
 |  | ||||||
| +
 |  | ||||||
| +static int
 |  | ||||||
| +ThunderSetupDecode(TIFF* tif)
 |  | ||||||
| +{
 |  | ||||||
| +	static const char module[] = "ThunderSetupDecode";
 |  | ||||||
| +
 |  | ||||||
| +        if( tif->tif_dir.td_bitspersample != 4 )
 |  | ||||||
| +        {
 |  | ||||||
| +                TIFFErrorExt(tif->tif_clientdata, module,
 |  | ||||||
| +                             "Wrong bitspersample value (%d), Thunder decoder only supports 4bits per sample.",
 |  | ||||||
| +                             (int) tif->tif_dir.td_bitspersample );
 |  | ||||||
| +                return 0;
 |  | ||||||
| +        }
 |  | ||||||
| +        
 |  | ||||||
| +
 |  | ||||||
| +	return (1);
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  static int |  | ||||||
| @@ -151,6 +171,7 @@
 |  | ||||||
|  	(void) scheme; |  | ||||||
|  	tif->tif_decoderow = ThunderDecodeRow; |  | ||||||
|  	tif->tif_decodestrip = ThunderDecodeRow; |  | ||||||
| +	tif->tif_setupdecode = ThunderSetupDecode;
 |  | ||||||
|  	return (1); |  | ||||||
|  } |  | ||||||
|  #endif /* THUNDER_SUPPORT */ |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| This patch is needed for building the package as of F-11.  It can be |  | ||||||
| dropped whenever autoconf 2.63 is no longer used on any live branch. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/configure.ac tiff-3.9.4/configure.ac
 |  | ||||||
| --- tiff-3.9.4.orig/configure.ac	2010-06-15 14:58:12.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/configure.ac	2010-06-15 17:13:11.000000000 -0400
 |  | ||||||
| @@ -24,7 +24,7 @@
 |  | ||||||
|   |  | ||||||
|  dnl Process this file with autoconf to produce a configure script. |  | ||||||
|   |  | ||||||
| -AC_PREREQ(2.64)
 |  | ||||||
| +AC_PREREQ(2.63)
 |  | ||||||
|  AC_INIT([LibTIFF Software],[3.9.4],[tiff@lists.maptools.org],[tiff]) |  | ||||||
|  AC_CONFIG_AUX_DIR(config) |  | ||||||
|  AC_CONFIG_MACRO_DIR(m4) |  | ||||||
| @ -1,48 +0,0 @@ | |||||||
| Upstream fix for bug #603024 is incomplete, tif_ojpeg.c should guard against |  | ||||||
| missing strip byte counts too.  Testing shows that tiffsplit.c has an issue |  | ||||||
| too. |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=1996 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/libtiff/tif_ojpeg.c tiff-3.9.4/libtiff/tif_ojpeg.c
 |  | ||||||
| --- tiff-3.9.4.orig/libtiff/tif_ojpeg.c	2010-06-08 19:29:51.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/libtiff/tif_ojpeg.c	2010-06-22 11:25:17.579807706 -0400
 |  | ||||||
| @@ -1920,6 +1920,10 @@
 |  | ||||||
|  							sp->in_buffer_file_pos=0; |  | ||||||
|  						else |  | ||||||
|  						{ |  | ||||||
| +							if (sp->tif->tif_dir.td_stripbytecount == 0) {
 |  | ||||||
| +								TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip byte counts are missing");
 |  | ||||||
| +								return(0);
 |  | ||||||
| +							}
 |  | ||||||
|  							sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile];   |  | ||||||
|  							if (sp->in_buffer_file_togo==0) |  | ||||||
|  								sp->in_buffer_file_pos=0; |  | ||||||
| diff -Naur tiff-3.9.4.orig/tools/tiffsplit.c tiff-3.9.4/tools/tiffsplit.c
 |  | ||||||
| --- tiff-3.9.4.orig/tools/tiffsplit.c	2010-06-08 14:50:44.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/tools/tiffsplit.c	2010-06-22 12:23:23.258823151 -0400
 |  | ||||||
| @@ -237,7 +237,10 @@
 |  | ||||||
|  		tstrip_t s, ns = TIFFNumberOfStrips(in); |  | ||||||
|  		uint32 *bytecounts; |  | ||||||
|   |  | ||||||
| -		TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts);
 |  | ||||||
| +		if (!TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts)) {
 |  | ||||||
| +			fprintf(stderr, "tiffsplit: strip byte counts are missing\n");
 |  | ||||||
| +			return (0);
 |  | ||||||
| +		}
 |  | ||||||
|  		for (s = 0; s < ns; s++) { |  | ||||||
|  			if (bytecounts[s] > (uint32)bufsize) { |  | ||||||
|  				buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[s]); |  | ||||||
| @@ -267,7 +270,10 @@
 |  | ||||||
|  		ttile_t t, nt = TIFFNumberOfTiles(in); |  | ||||||
|  		uint32 *bytecounts; |  | ||||||
|   |  | ||||||
| -		TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts);
 |  | ||||||
| +		if (!TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts)) {
 |  | ||||||
| +			fprintf(stderr, "tiffsplit: tile byte counts are missing\n");
 |  | ||||||
| +			return (0);
 |  | ||||||
| +		}
 |  | ||||||
|  		for (t = 0; t < nt; t++) { |  | ||||||
|  			if (bytecounts[t] > (uint32) bufsize) { |  | ||||||
|  				buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[t]); |  | ||||||
| @ -1,48 +0,0 @@ | |||||||
| Fix misbehavior on 64-bit machines when trying to flip a downsampled image |  | ||||||
| vertically: unsigned ints will be widened to 64 bits the wrong way. |  | ||||||
| See RH bug #583081. |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=2207 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.2.orig/libtiff/tif_getimage.c tiff-3.9.2/libtiff/tif_getimage.c
 |  | ||||||
| --- tiff-3.9.2.orig/libtiff/tif_getimage.c	2009-08-30 12:21:46.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.2/libtiff/tif_getimage.c	2010-06-10 15:07:28.000000000 -0400
 |  | ||||||
| @@ -1846,6 +1846,7 @@
 |  | ||||||
|  DECLAREContigPutFunc(putcontig8bitYCbCr22tile) |  | ||||||
|  { |  | ||||||
|  	uint32* cp2; |  | ||||||
| +	int32 incr = 2*toskew+w;
 |  | ||||||
|  	(void) y; |  | ||||||
|  	fromskew = (fromskew / 2) * 6; |  | ||||||
|  	cp2 = cp+w+toskew; |  | ||||||
| @@ -1872,8 +1873,8 @@
 |  | ||||||
|  			cp2 ++ ; |  | ||||||
|  			pp += 6; |  | ||||||
|  		} |  | ||||||
| -		cp += toskew*2+w;
 |  | ||||||
| -		cp2 += toskew*2+w;
 |  | ||||||
| +		cp += incr;
 |  | ||||||
| +		cp2 += incr;
 |  | ||||||
|  		pp += fromskew; |  | ||||||
|  		h-=2; |  | ||||||
|  	} |  | ||||||
| @@ -1939,6 +1940,7 @@
 |  | ||||||
|  DECLAREContigPutFunc(putcontig8bitYCbCr12tile) |  | ||||||
|  { |  | ||||||
|  	uint32* cp2; |  | ||||||
| +	int32 incr = 2*toskew+w;
 |  | ||||||
|  	(void) y; |  | ||||||
|  	fromskew = (fromskew / 2) * 4; |  | ||||||
|  	cp2 = cp+w+toskew; |  | ||||||
| @@ -1953,8 +1955,8 @@
 |  | ||||||
|  			cp2 ++; |  | ||||||
|  			pp += 4; |  | ||||||
|  		} while (--x); |  | ||||||
| -		cp += toskew*2+w;
 |  | ||||||
| -		cp2 += toskew*2+w;
 |  | ||||||
| +		cp += incr;
 |  | ||||||
| +		cp2 += incr;
 |  | ||||||
|  		pp += fromskew; |  | ||||||
|  		h-=2; |  | ||||||
|  	} |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| gif2tiff buffer overrun.  Filed upstream at |  | ||||||
| http://bugzilla.maptools.org/show_bug.cgi?id=2270 |  | ||||||
| 
 |  | ||||||
| This appears not to be security critical: it's a read not a write |  | ||||||
| overrun, so the worst possible consequence is SIGSEGV, and even that |  | ||||||
| doesn't seem to happen on any popular architectures. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/tools/gif2tiff.c tiff-3.9.4/tools/gif2tiff.c
 |  | ||||||
| --- tiff-3.9.4.orig/tools/gif2tiff.c	2010-06-08 14:50:44.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/tools/gif2tiff.c	2010-11-02 22:32:10.018264489 -0400
 |  | ||||||
| @@ -503,6 +503,10 @@
 |  | ||||||
|      strip = 0; |  | ||||||
|      stripsize = TIFFStripSize(tif); |  | ||||||
|      for (row=0; row<height; row += rowsperstrip) { |  | ||||||
| +	if (rowsperstrip > height-row) {
 |  | ||||||
| +	    rowsperstrip = height-row;
 |  | ||||||
| +	    stripsize = TIFFVStripSize(tif, rowsperstrip);
 |  | ||||||
| +	}
 |  | ||||||
|  	if (TIFFWriteEncodedStrip(tif, strip, newras+row*width, stripsize) < 0) |  | ||||||
|  	    break; |  | ||||||
|  	strip++; |  | ||||||
| @ -1,17 +0,0 @@ | |||||||
| Minor typo, reported upstream at |  | ||||||
| http://bugzilla.maptools.org/show_bug.cgi?id=2129 |  | ||||||
| This patch should not be needed as of libtiff 4.0. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.2.orig/man/tiffset.1 tiff-3.9.2/man/tiffset.1
 |  | ||||||
| --- tiff-3.9.2.orig/man/tiffset.1	2006-04-20 08:17:19.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.2/man/tiffset.1	2009-12-03 12:11:58.000000000 -0500
 |  | ||||||
| @@ -60,7 +60,7 @@
 |  | ||||||
|  ``Anonymous'': |  | ||||||
|  .RS |  | ||||||
|  .nf |  | ||||||
| -tiffset \-s 305 Anonymous a.tif
 |  | ||||||
| +tiffset \-s 315 Anonymous a.tif
 |  | ||||||
|  .fi |  | ||||||
|  .RE |  | ||||||
|  .PP |  | ||||||
| @ -1,72 +0,0 @@ | |||||||
| Partial fix for issues filed upstream at |  | ||||||
| http://bugzilla.maptools.org/show_bug.cgi?id=2140 |  | ||||||
| This stops the tiffcmp core dump noted in bug #460322, but isn't enough |  | ||||||
| to make tiffcmp return the right answer (it emits a bunch of error |  | ||||||
| messages instead). |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.2.orig/libtiff/tif_jpeg.c tiff-3.9.2/libtiff/tif_jpeg.c
 |  | ||||||
| --- tiff-3.9.2.orig/libtiff/tif_jpeg.c	2009-08-30 12:21:46.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.2/libtiff/tif_jpeg.c	2010-01-05 22:40:40.000000000 -0500
 |  | ||||||
| @@ -988,8 +988,15 @@
 |  | ||||||
|  	tsize_t nrows; |  | ||||||
|  	(void) s; |  | ||||||
|   |  | ||||||
| -	/* data is expected to be read in multiples of a scanline */
 |  | ||||||
| -	if ( (nrows = sp->cinfo.d.image_height) ) {
 |  | ||||||
| +    nrows = cc / sp->bytesperline;
 |  | ||||||
| +    if (cc % sp->bytesperline)
 |  | ||||||
| +		TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline not read");
 |  | ||||||
| +
 |  | ||||||
| +    if( nrows > (int) sp->cinfo.d.image_height )
 |  | ||||||
| +        nrows = sp->cinfo.d.image_height;
 |  | ||||||
| +
 |  | ||||||
| +    /* data is expected to be read in multiples of a scanline */
 |  | ||||||
| +    if (nrows) {
 |  | ||||||
|  		/* Cb,Cr both have sampling factors 1, so this is correct */ |  | ||||||
|  		JDIMENSION clumps_per_line = sp->cinfo.d.comp_info[1].downsampled_width;             |  | ||||||
|  		int samples_per_clump = sp->samplesperclump; |  | ||||||
| @@ -1087,8 +1094,7 @@
 |  | ||||||
|  			 * TODO: resolve this */ |  | ||||||
|  			buf += sp->bytesperline; |  | ||||||
|  			cc -= sp->bytesperline; |  | ||||||
| -			nrows -= sp->v_sampling;
 |  | ||||||
| -		} while (nrows > 0);
 |  | ||||||
| +		} while (--nrows > 0);
 |  | ||||||
|   |  | ||||||
|  #ifdef JPEG_LIB_MK1 |  | ||||||
|  		_TIFFfree(tmpbuf); |  | ||||||
| diff -Naur tiff-3.9.2.orig/libtiff/tif_strip.c tiff-3.9.2/libtiff/tif_strip.c
 |  | ||||||
| --- tiff-3.9.2.orig/libtiff/tif_strip.c	2006-03-25 13:04:35.000000000 -0500
 |  | ||||||
| +++ tiff-3.9.2/libtiff/tif_strip.c	2010-01-05 21:39:20.000000000 -0500
 |  | ||||||
| @@ -238,23 +238,19 @@
 |  | ||||||
|  				     ycbcrsubsampling + 0, |  | ||||||
|  				     ycbcrsubsampling + 1); |  | ||||||
|   |  | ||||||
| -			if (ycbcrsubsampling[0] == 0) {
 |  | ||||||
| +			if (ycbcrsubsampling[0]*ycbcrsubsampling[1] == 0) {
 |  | ||||||
|  				TIFFErrorExt(tif->tif_clientdata, tif->tif_name, |  | ||||||
|  					     "Invalid YCbCr subsampling"); |  | ||||||
|  				return 0; |  | ||||||
|  			} |  | ||||||
|   |  | ||||||
| -			scanline = TIFFroundup(td->td_imagewidth,
 |  | ||||||
| +			/* number of sample clumps per line */
 |  | ||||||
| +			scanline = TIFFhowmany(td->td_imagewidth,
 |  | ||||||
|  					       ycbcrsubsampling[0]); |  | ||||||
| -			scanline = TIFFhowmany8(multiply(tif, scanline,
 |  | ||||||
| -							 td->td_bitspersample,
 |  | ||||||
| -							 "TIFFScanlineSize"));
 |  | ||||||
| -			return ((tsize_t)
 |  | ||||||
| -				summarize(tif, scanline,
 |  | ||||||
| -					  multiply(tif, 2,
 |  | ||||||
| -						scanline / ycbcrsubsampling[0],
 |  | ||||||
| -						"TIFFVStripSize"),
 |  | ||||||
| -					  "TIFFVStripSize"));
 |  | ||||||
| +			/* number of samples per line */
 |  | ||||||
| +			scanline = multiply(tif, scanline,
 |  | ||||||
| +					    ycbcrsubsampling[0]*ycbcrsubsampling[1] + 2,
 |  | ||||||
| +					    "TIFFScanlineSize");
 |  | ||||||
|  		} else { |  | ||||||
|  			scanline = multiply(tif, td->td_imagewidth, |  | ||||||
|  					    td->td_samplesperpixel, |  | ||||||
| @ -1,51 +0,0 @@ | |||||||
| Use the spec-mandated default YCbCrSubSampling values in strip size |  | ||||||
| calculations, if the YCBCRSUBSAMPLING tag hasn't been provided. |  | ||||||
| See bug #603703. |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=2215 |  | ||||||
| 
 |  | ||||||
| NB: must be applied after libtiff-scanlinesize.patch to avoid fuzz issues. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.2.orig/libtiff/tif_strip.c tiff-3.9.2/libtiff/tif_strip.c
 |  | ||||||
| --- tiff-3.9.2.orig/libtiff/tif_strip.c	2006-03-25 13:04:35.000000000 -0500
 |  | ||||||
| +++ tiff-3.9.2/libtiff/tif_strip.c	2010-06-14 12:00:49.000000000 -0400
 |  | ||||||
| @@ -124,9 +124,9 @@
 |  | ||||||
|  		uint16 ycbcrsubsampling[2]; |  | ||||||
|  		tsize_t w, scanline, samplingarea; |  | ||||||
|   |  | ||||||
| -		TIFFGetField( tif, TIFFTAG_YCBCRSUBSAMPLING,
 |  | ||||||
| -			      ycbcrsubsampling + 0,
 |  | ||||||
| -			      ycbcrsubsampling + 1 );
 |  | ||||||
| +		TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING,
 |  | ||||||
| +				      ycbcrsubsampling + 0,
 |  | ||||||
| +				      ycbcrsubsampling + 1);
 |  | ||||||
|   |  | ||||||
|  		samplingarea = ycbcrsubsampling[0]*ycbcrsubsampling[1]; |  | ||||||
|  		if (samplingarea == 0) { |  | ||||||
| @@ -234,9 +234,9 @@
 |  | ||||||
|  		    && !isUpSampled(tif)) { |  | ||||||
|  			uint16 ycbcrsubsampling[2]; |  | ||||||
|   |  | ||||||
| -			TIFFGetField(tif, TIFFTAG_YCBCRSUBSAMPLING,
 |  | ||||||
| -				     ycbcrsubsampling + 0,
 |  | ||||||
| -				     ycbcrsubsampling + 1);
 |  | ||||||
| +			TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING,
 |  | ||||||
| +					      ycbcrsubsampling + 0,
 |  | ||||||
| +					      ycbcrsubsampling + 1);
 |  | ||||||
|   |  | ||||||
|  			if (ycbcrsubsampling[0]*ycbcrsubsampling[1] == 0) { |  | ||||||
|  				TIFFErrorExt(tif->tif_clientdata, tif->tif_name, |  | ||||||
| @@ -308,9 +308,9 @@
 |  | ||||||
|  		    && !isUpSampled(tif)) { |  | ||||||
|  			uint16 ycbcrsubsampling[2]; |  | ||||||
|   |  | ||||||
| -			TIFFGetField(tif, TIFFTAG_YCBCRSUBSAMPLING,
 |  | ||||||
| -				     ycbcrsubsampling + 0,
 |  | ||||||
| -				     ycbcrsubsampling + 1);
 |  | ||||||
| +			TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING,
 |  | ||||||
| +					      ycbcrsubsampling + 0,
 |  | ||||||
| +					      ycbcrsubsampling + 1);
 |  | ||||||
|   |  | ||||||
|  			if (ycbcrsubsampling[0]*ycbcrsubsampling[1] == 0) { |  | ||||||
|  				TIFFErrorExt(tif->tif_clientdata, tif->tif_name, |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| Make tiffdump more paranoid about checking the count field of a directory |  | ||||||
| entry. |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=2218 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/tools/tiffdump.c tiff-3.9.4/tools/tiffdump.c
 |  | ||||||
| --- tiff-3.9.4.orig/tools/tiffdump.c	2010-06-08 14:50:44.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/tools/tiffdump.c	2010-06-22 12:51:42.207932477 -0400
 |  | ||||||
| @@ -46,6 +46,7 @@
 |  | ||||||
|  # include <io.h> |  | ||||||
|  #endif |  | ||||||
|   |  | ||||||
| +#include "tiffiop.h"
 |  | ||||||
|  #include "tiffio.h" |  | ||||||
|   |  | ||||||
|  #ifndef O_BINARY |  | ||||||
| @@ -317,7 +318,7 @@
 |  | ||||||
|  			printf(">\n"); |  | ||||||
|  			continue; |  | ||||||
|  		} |  | ||||||
| -		space = dp->tdir_count * datawidth[dp->tdir_type];
 |  | ||||||
| +		space = TIFFSafeMultiply(int, dp->tdir_count, datawidth[dp->tdir_type]);
 |  | ||||||
|  		if (space <= 0) { |  | ||||||
|  			printf(">\n"); |  | ||||||
|  			Error("Invalid count for tag %u", dp->tdir_tag); |  | ||||||
| @@ -709,7 +710,7 @@
 |  | ||||||
|  	w = (dir->tdir_type < NWIDTHS ? datawidth[dir->tdir_type] : 0); |  | ||||||
|  	cc = dir->tdir_count * w; |  | ||||||
|  	if (lseek(fd, (off_t)dir->tdir_offset, 0) != (off_t)-1 |  | ||||||
| -	    && read(fd, cp, cc) != -1) {
 |  | ||||||
| +	    && read(fd, cp, cc) == cc) {
 |  | ||||||
|  		if (swabflag) { |  | ||||||
|  			switch (dir->tdir_type) { |  | ||||||
|  			case TIFF_SHORT: |  | ||||||
| @ -1,47 +0,0 @@ | |||||||
| Ooops, previous fix to unknown-tag handling caused TIFFReadDirectory to |  | ||||||
| sometimes complain about out-of-order tags when there weren't really any. |  | ||||||
| Fix by decoupling that logic from the tag search logic. |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=2210 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.4.orig/libtiff/tif_dirread.c tiff-3.9.4/libtiff/tif_dirread.c
 |  | ||||||
| --- tiff-3.9.4.orig/libtiff/tif_dirread.c	2010-06-14 10:27:51.000000000 -0400
 |  | ||||||
| +++ tiff-3.9.4/libtiff/tif_dirread.c	2010-06-16 01:27:03.000000000 -0400
 |  | ||||||
| @@ -83,6 +83,7 @@
 |  | ||||||
|  	const TIFFFieldInfo* fip; |  | ||||||
|  	size_t fix; |  | ||||||
|  	uint16 dircount; |  | ||||||
| +	uint16 previous_tag = 0;
 |  | ||||||
|  	int diroutoforderwarning = 0, compressionknown = 0; |  | ||||||
|  	int haveunknowntags = 0; |  | ||||||
|   |  | ||||||
| @@ -163,23 +164,24 @@
 |  | ||||||
|   |  | ||||||
|  		if (dp->tdir_tag == IGNORE) |  | ||||||
|  			continue; |  | ||||||
| -		if (fix >= tif->tif_nfields)
 |  | ||||||
| -			fix = 0;
 |  | ||||||
|   |  | ||||||
|  		/* |  | ||||||
|  		 * Silicon Beach (at least) writes unordered |  | ||||||
|  		 * directory tags (violating the spec).  Handle |  | ||||||
|  		 * it here, but be obnoxious (maybe they'll fix it?). |  | ||||||
|  		 */ |  | ||||||
| -		if (dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag) {
 |  | ||||||
| +		if (dp->tdir_tag < previous_tag) {
 |  | ||||||
|  			if (!diroutoforderwarning) { |  | ||||||
|  				TIFFWarningExt(tif->tif_clientdata, module, |  | ||||||
|  	"%s: invalid TIFF directory; tags are not sorted in ascending order", |  | ||||||
|  					    tif->tif_name); |  | ||||||
|  				diroutoforderwarning = 1; |  | ||||||
|  			} |  | ||||||
| -			fix = 0;			/* O(n^2) */
 |  | ||||||
|  		} |  | ||||||
| +		previous_tag = dp->tdir_tag;
 |  | ||||||
| +		if (fix >= tif->tif_nfields ||
 |  | ||||||
| +		    dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag)
 |  | ||||||
| +			fix = 0;			/* O(n^2) */
 |  | ||||||
|  		while (fix < tif->tif_nfields && |  | ||||||
|  		    tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) |  | ||||||
|  			fix++; |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| Using an array to clamp translated YCbCr values is insecure, because if the |  | ||||||
| TIFF file contains bogus ReferenceBlackWhite parameters, the computed RGB |  | ||||||
| values could be very far out of range (much further than the current array |  | ||||||
| size, anyway), possibly resulting in SIGSEGV.  Just drop the whole idea in |  | ||||||
| favor of using a comparison-based macro to clamp.  See RH bug #583081. |  | ||||||
| 
 |  | ||||||
| Filed upstream at http://bugzilla.maptools.org/show_bug.cgi?id=2208 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| diff -Naur tiff-3.9.2.orig/libtiff/tif_color.c tiff-3.9.2/libtiff/tif_color.c
 |  | ||||||
| --- tiff-3.9.2.orig/libtiff/tif_color.c	2006-02-09 10:42:20.000000000 -0500
 |  | ||||||
| +++ tiff-3.9.2/libtiff/tif_color.c	2010-06-10 15:53:24.000000000 -0400
 |  | ||||||
| @@ -183,13 +183,18 @@
 |  | ||||||
|  TIFFYCbCrtoRGB(TIFFYCbCrToRGB *ycbcr, uint32 Y, int32 Cb, int32 Cr, |  | ||||||
|  	       uint32 *r, uint32 *g, uint32 *b) |  | ||||||
|  { |  | ||||||
| +	int32 i;
 |  | ||||||
| +
 |  | ||||||
|  	/* XXX: Only 8-bit YCbCr input supported for now */ |  | ||||||
|  	Y = HICLAMP(Y, 255), Cb = CLAMP(Cb, 0, 255), Cr = CLAMP(Cr, 0, 255); |  | ||||||
|   |  | ||||||
| -	*r = ycbcr->clamptab[ycbcr->Y_tab[Y] + ycbcr->Cr_r_tab[Cr]];
 |  | ||||||
| -	*g = ycbcr->clamptab[ycbcr->Y_tab[Y]
 |  | ||||||
| -	    + (int)((ycbcr->Cb_g_tab[Cb] + ycbcr->Cr_g_tab[Cr]) >> SHIFT)];
 |  | ||||||
| -	*b = ycbcr->clamptab[ycbcr->Y_tab[Y] + ycbcr->Cb_b_tab[Cb]];
 |  | ||||||
| +	i = ycbcr->Y_tab[Y] + ycbcr->Cr_r_tab[Cr];
 |  | ||||||
| +	*r = CLAMP(i, 0, 255);
 |  | ||||||
| +	i = ycbcr->Y_tab[Y]
 |  | ||||||
| +	    + (int)((ycbcr->Cb_g_tab[Cb] + ycbcr->Cr_g_tab[Cr]) >> SHIFT);
 |  | ||||||
| +	*g = CLAMP(i, 0, 255);
 |  | ||||||
| +	i = ycbcr->Y_tab[Y] + ycbcr->Cb_b_tab[Cb];
 |  | ||||||
| +	*b = CLAMP(i, 0, 255);
 |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|  /* |  | ||||||
							
								
								
									
										36
									
								
								libtiff.spec
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								libtiff.spec
									
									
									
									
									
								
							| @ -1,26 +1,13 @@ | |||||||
| Summary: Library of functions for manipulating TIFF format image files | Summary: Library of functions for manipulating TIFF format image files | ||||||
| Name: libtiff | Name: libtiff | ||||||
| Version: 3.9.4 | Version: 3.9.5 | ||||||
| Release: 4%{?dist} | Release: 1%{?dist} | ||||||
| 
 | 
 | ||||||
| License: libtiff | License: libtiff | ||||||
| Group: System Environment/Libraries | Group: System Environment/Libraries | ||||||
| URL: http://www.remotesensing.org/libtiff/ | URL: http://www.remotesensing.org/libtiff/ | ||||||
| 
 | 
 | ||||||
| Source: ftp://ftp.remotesensing.org/pub/libtiff/tiff-%{version}.tar.gz | Source: ftp://ftp.remotesensing.org/pub/libtiff/tiff-%{version}.tar.gz | ||||||
| Patch1: libtiff-acversion.patch |  | ||||||
| Patch2: libtiff-mantypo.patch |  | ||||||
| Patch3: libtiff-scanlinesize.patch |  | ||||||
| Patch4: libtiff-getimage-64bit.patch |  | ||||||
| Patch5: libtiff-ycbcr-clamp.patch |  | ||||||
| Patch6: libtiff-3samples.patch |  | ||||||
| Patch7: libtiff-subsampling.patch |  | ||||||
| Patch8: libtiff-unknown-fix.patch |  | ||||||
| Patch9: libtiff-checkbytecount.patch |  | ||||||
| Patch10: libtiff-tiffdump.patch |  | ||||||
| Patch11: libtiff-CVE-2011-0192.patch |  | ||||||
| Patch12: libtiff-CVE-2011-1167.patch |  | ||||||
| Patch13: libtiff-gif2tiff-overrun.patch |  | ||||||
| 
 | 
 | ||||||
| BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root | BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root | ||||||
| BuildRequires: zlib-devel libjpeg-devel | BuildRequires: zlib-devel libjpeg-devel | ||||||
| @ -73,20 +60,6 @@ image files using the libtiff library. | |||||||
| %prep | %prep | ||||||
| %setup -q -n tiff-%{version} | %setup -q -n tiff-%{version} | ||||||
| 
 | 
 | ||||||
| %patch1 -p1 |  | ||||||
| %patch2 -p1 |  | ||||||
| %patch3 -p1 |  | ||||||
| %patch4 -p1 |  | ||||||
| %patch5 -p1 |  | ||||||
| %patch6 -p1 |  | ||||||
| %patch7 -p1 |  | ||||||
| %patch8 -p1 |  | ||||||
| %patch9 -p1 |  | ||||||
| %patch10 -p1 |  | ||||||
| %patch11 -p1 |  | ||||||
| %patch12 -p1 |  | ||||||
| %patch13 -p1 |  | ||||||
| 
 |  | ||||||
| # Use build system's libtool.m4, not the one in the package. | # Use build system's libtool.m4, not the one in the package. | ||||||
| rm -f libtool.m4 | rm -f libtool.m4 | ||||||
| 
 | 
 | ||||||
| @ -197,6 +170,11 @@ rm -rf $RPM_BUILD_ROOT | |||||||
| %{_mandir}/man1/* | %{_mandir}/man1/* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Apr 12 2011 Tom Lane <tgl@redhat.com> 3.9.5-1 | ||||||
|  | - Update to libtiff 3.9.5, incorporating all our previous patches plus other | ||||||
|  |   fixes, notably the fix for CVE-2009-5022 | ||||||
|  | Related: #695885 | ||||||
|  | 
 | ||||||
| * Mon Mar 21 2011 Tom Lane <tgl@redhat.com> 3.9.4-4 | * Mon Mar 21 2011 Tom Lane <tgl@redhat.com> 3.9.4-4 | ||||||
| - Fix incorrect fix for CVE-2011-0192 | - Fix incorrect fix for CVE-2011-0192 | ||||||
| Resolves: #684007 | Resolves: #684007 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user