d3e0b59
From 43bc256d8ae44b92d2734a3c5bc73957a4d7c1ec Mon Sep 17 00:00:00 2001
d3e0b59
From: erouault <erouault>
d3e0b59
Date: Sat, 3 Dec 2016 11:15:18 +0000
d3e0b59
Subject: [PATCH] * libtiff/tif_ojpeg.c: make OJPEGDecode() early exit in case
d3e0b59
 of failure in OJPEGPreDecode(). This will avoid a divide by zero, and
d3e0b59
 potential other issues. Reported by Agostino Sarubbo. Fixes
d3e0b59
 http://bugzilla.maptools.org/show_bug.cgi?id=2611
d3e0b59
d3e0b59
---
d3e0b59
 libtiff/tif_ojpeg.c | 8 ++++++++
d3e0b59
 1 file changed, 8 insertions(+)
d3e0b59
d3e0b59
diff --git a/libtiff/tif_ojpeg.c b/libtiff/tif_ojpeg.c
d3e0b59
index 1ccc3f9..f19e8fd 100644
d3e0b59
--- a/libtiff/tif_ojpeg.c
d3e0b59
+++ b/libtiff/tif_ojpeg.c
d3e0b59
@@ -244,6 +244,7 @@ typedef enum {
d3e0b59
 
d3e0b59
 typedef struct {
d3e0b59
 	TIFF* tif;
d3e0b59
+        int decoder_ok;
d3e0b59
 	#ifndef LIBJPEG_ENCAP_EXTERNAL
d3e0b59
 	JMP_BUF exit_jmpbuf;
d3e0b59
 	#endif
d3e0b59
@@ -722,6 +723,7 @@ OJPEGPreDecode(TIFF* tif, uint16 s)
d3e0b59
 		}
d3e0b59
 		sp->write_curstrile++;
d3e0b59
 	}
d3e0b59
+	sp->decoder_ok = 1;
d3e0b59
 	return(1);
d3e0b59
 }
d3e0b59
 
d3e0b59
@@ -784,8 +786,14 @@ OJPEGPreDecodeSkipScanlines(TIFF* tif)
d3e0b59
 static int
d3e0b59
 OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s)
d3e0b59
 {
d3e0b59
+        static const char module[]="OJPEGDecode";
d3e0b59
 	OJPEGState* sp=(OJPEGState*)tif->tif_data;
d3e0b59
 	(void)s;
d3e0b59
+        if( !sp->decoder_ok )
d3e0b59
+        {
d3e0b59
+            TIFFErrorExt(tif->tif_clientdata,module,"Cannot decode: decoder not correctly initialized");
d3e0b59
+            return 0;
d3e0b59
+        }
d3e0b59
 	if (sp->libjpeg_jpeg_query_style==0)
d3e0b59
 	{
d3e0b59
 		if (OJPEGDecodeRaw(tif,buf,cc)==0)
d3e0b59
-- 
d3e0b59
2.7.4
d3e0b59