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