libtiff: fix in JPEGInitializeLibJPEG for compress/decompress mixup (bug #1541)

From 2cce24e599bfef27863684c9d21b8c42ea0dde04 Mon Sep 17 00:00:00 2001
From: Frank Warmerdam <[EMAIL REDACTED]>
Date: Fri, 6 Apr 2007 21:01:21 +0000
Subject: [PATCH] fix in JPEGInitializeLibJPEG for compress/decompress mixup
 (bug #1541)

---
 ChangeLog          |  9 +++++++++
 libtiff/tif_jpeg.c | 14 ++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index adf086d1..fefebccd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-04-06  Frank Warmerdam  <warmerdam@pobox.com>
+
+	* libtiff/tif_jpeg.c: Changed JPEGInitializeLibJPEG() so that it
+	will convert from decompressor to compressor or compress to decompress
+	if required by the force arguments.  This works around a problem in
+	where the JPEGFixupTestSubsampling() may cause a decompressor to 
+	be setup on a directory when later a compressor is required with the
+	force flag set.  Occurs with the addtiffo program for instance. 
+
 2007-04-06  Andrey Kiselev  <dron@ak4719.spb.edu>
 
 	* libtiff/tif_dirwrite.c: Fixed swapping of byte arrays stored
diff --git a/libtiff/tif_jpeg.c b/libtiff/tif_jpeg.c
index e41d9130..344ac055 100644
--- a/libtiff/tif_jpeg.c
+++ b/libtiff/tif_jpeg.c
@@ -1,4 +1,4 @@
-/* $Id: tif_jpeg.c,v 1.50 2006-10-12 18:02:52 dron Exp $ */
+/* $Id: tif_jpeg.c,v 1.50.2.1 2007-04-06 21:01:22 fwarmerdam Exp $ */
 
 /*
  * Copyright (c) 1994-1997 Sam Leffler
@@ -1864,8 +1864,18 @@ static int JPEGInitializeLibJPEG( TIFF * tif, int force_encode, int force_decode
     int     data_is_empty = TRUE;
     int     decompress;
 
+
     if(sp->cinfo_initialized)
-        return 1;
+    {
+        if( force_encode && sp->cinfo.comm.is_decompressor )
+            TIFFjpeg_destroy( sp );
+        else if( force_decode && !sp->cinfo.comm.is_decompressor )
+            TIFFjpeg_destroy( sp );
+        else
+            return 1;
+
+        sp->cinfo_initialized = 0;
+    }
 
     /*
      * Do we have tile data already?  Make sure we initialize the