Back-port upstream patch to avoid assuming quite so much about what libjpeg
will return.  Needed because libjpeg-turbo with the jpeg8 API broke the
expectations of the previous coding.


diff -Naur tiff-4.0.3.orig/test/raw_decode.c tiff-4.0.3/test/raw_decode.c
--- tiff-4.0.3.orig/test/raw_decode.c	2012-07-06 13:05:16.000000000 -0400
+++ tiff-4.0.3/test/raw_decode.c	2012-12-19 13:04:37.609738276 -0500
@@ -71,33 +71,54 @@
 	return 1;
 }
 
-static int check_rgb_pixel( int pixel, int red, int green, int blue, unsigned char *buffer ) {
+static int check_rgb_pixel( int pixel,
+			    int min_red, int max_red,
+			    int min_green, int max_green,
+			    int min_blue, int max_blue,
+			    unsigned char *buffer ) {
 	unsigned char *rgb = buffer + 3 * pixel;
 	
-	if( rgb[0] == red && rgb[1] == green && rgb[2] == blue ) {
+	if( rgb[0] >= min_red && rgb[0] <= max_red &&
+	    rgb[1] >= min_green && rgb[1] <= max_green &&
+	    rgb[2] >= min_blue && rgb[2] <= max_blue ) {
 		return 0;
 	}
 
 	fprintf( stderr, "Pixel %d did not match expected results.\n", pixel );
-	fprintf( stderr, "Expect: %3d %3d %3d\n", red, green, blue );
-	fprintf( stderr, "   Got: %3d %3d %3d\n", rgb[0], rgb[1], rgb[2] );
+	fprintf( stderr, "Got R=%d (expected %d..%d), G=%d (expected %d..%d), B=%d (expected %d..%d)\n",
+		 rgb[0], min_red, max_red,
+		 rgb[1], min_green, max_green,
+		 rgb[2], min_blue, max_blue );
 	return 1;
 }
 
-static int check_rgba_pixel( int pixel, int red, int green, int blue, int alpha, uint32 *buffer ) {
+static int check_rgba_pixel( int pixel,
+			     int min_red, int max_red,
+			     int min_green, int max_green,
+			     int min_blue, int max_blue,
+			     int min_alpha, int max_alpha,
+			     uint32 *buffer ) {
 	/* RGBA images are upside down - adjust for normal ordering */
 	int adjusted_pixel = pixel % 128 + (127 - (pixel/128)) * 128;
 	uint32 rgba = buffer[adjusted_pixel];
 
-	if( TIFFGetR(rgba) == (uint32) red && TIFFGetG(rgba) == (uint32) green &&
-	    TIFFGetB(rgba) == (uint32) blue && TIFFGetA(rgba) == (uint32) alpha ) {
+	if( TIFFGetR(rgba) >= (uint32) min_red &&
+	    TIFFGetR(rgba) <= (uint32) max_red &&
+	    TIFFGetG(rgba) >= (uint32) min_green &&
+	    TIFFGetG(rgba) <= (uint32) max_green &&
+	    TIFFGetB(rgba) >= (uint32) min_blue &&
+	    TIFFGetB(rgba) <= (uint32) max_blue &&
+	    TIFFGetA(rgba) >= (uint32) min_alpha &&
+	    TIFFGetA(rgba) <= (uint32) max_alpha ) {
 		return 0;
 	}
 
 	fprintf( stderr, "Pixel %d did not match expected results.\n", pixel );
-	fprintf( stderr, "Expect: %3d %3d %3d %3d\n", red, green, blue, alpha );
-	fprintf( stderr, "   Got: %3d %3d %3d %3d\n",
-		 TIFFGetR(rgba), TIFFGetG(rgba), TIFFGetB(rgba), TIFFGetA(rgba) );
+	fprintf( stderr, "Got R=%d (expected %d..%d), G=%d (expected %d..%d), B=%d (expected %d..%d), A=%d (expected %d..%d)\n",
+		 TIFFGetR(rgba), min_red, max_red,
+		 TIFFGetG(rgba), min_green, max_green,
+		 TIFFGetB(rgba), min_blue, max_blue,
+		 TIFFGetA(rgba), min_alpha, max_alpha );
 	return 1;
 }
 
@@ -191,15 +212,17 @@
 		return 1;
 	}
 
-#if JPEG_LIB_VERSION >= 70
-	pixel_status |= check_rgb_pixel( 0, 18, 0, 41, buffer );
-	pixel_status |= check_rgb_pixel( 64, 0, 0, 0, buffer );
-	pixel_status |= check_rgb_pixel( 512, 5, 34, 196, buffer );
-#else
-	pixel_status |= check_rgb_pixel( 0, 15, 0, 18, buffer );
-	pixel_status |= check_rgb_pixel( 64, 0, 0, 2, buffer );
-	pixel_status |= check_rgb_pixel( 512, 6, 36, 182, buffer );
-#endif
+	/*
+	 * JPEG decoding is inherently inexact, so we can't test for exact
+	 * pixel values.  (Well, if we knew exactly which libjpeg version
+	 * we were using, and with what settings, we could expect specific
+	 * values ... but it's not worth the trouble to keep track of.)
+	 * Hence, use ranges of expected values.  The ranges may need to be
+	 * widened over time as more versions of libjpeg appear.
+	 */
+	pixel_status |= check_rgb_pixel( 0, 15, 18, 0, 0, 18, 41, buffer );
+	pixel_status |= check_rgb_pixel( 64, 0, 0, 0, 0, 0, 2, buffer );
+	pixel_status |= check_rgb_pixel( 512, 5, 6, 34, 36, 182, 196, buffer );
 
 	free( buffer );
 
@@ -224,15 +247,12 @@
 	 * accomplish it from the YCbCr subsampled buffer ourselves in which
 	 * case the results may be subtly different but similar.
 	 */
-#if JPEG_LIB_VERSION >= 70
-	pixel_status |= check_rgba_pixel( 0, 18, 0, 41, 255, rgba_buffer );
-	pixel_status |= check_rgba_pixel( 64, 0, 0, 0, 255, rgba_buffer );
-	pixel_status |= check_rgba_pixel( 512, 5, 34, 196, 255, rgba_buffer );
-#else
-	pixel_status |= check_rgba_pixel( 0, 15, 0, 18, 255, rgba_buffer );
-	pixel_status |= check_rgba_pixel( 64, 0, 0, 2, 255, rgba_buffer );
-	pixel_status |= check_rgba_pixel( 512, 6, 36, 182, 255, rgba_buffer );
-#endif
+	pixel_status |= check_rgba_pixel( 0, 15, 18, 0, 0, 18, 41, 255, 255,
+					  rgba_buffer );
+	pixel_status |= check_rgba_pixel( 64, 0, 0, 0, 0, 0, 2, 255, 255,
+					  rgba_buffer );
+	pixel_status |= check_rgba_pixel( 512, 5, 6, 34, 36, 182, 196, 255, 255,
+					  rgba_buffer );
 
 	free( rgba_buffer );
 	TIFFClose(tif);
