Index: third_party/libtiff/tif_write.c |
diff --git a/third_party/tiff_v403/tif_write.c b/third_party/libtiff/tif_write.c |
similarity index 94% |
rename from third_party/tiff_v403/tif_write.c |
rename to third_party/libtiff/tif_write.c |
index f32ee9078b354ace626e3ddf6ea9f63256479b1f..7996c31e08a07630c3be3497d6a783f584b1a2f5 100644 |
--- a/third_party/tiff_v403/tif_write.c |
+++ b/third_party/libtiff/tif_write.c |
@@ -1,4 +1,4 @@ |
-/* $Id: tif_write.c,v 1.37 2012-08-13 22:10:17 fwarmerdam Exp $ */ |
+/* $Id: tif_write.c,v 1.42 2015-06-07 23:00:23 bfriesen Exp $ */ |
/* |
* Copyright (c) 1988-1997 Sam Leffler |
@@ -115,6 +115,10 @@ TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample) |
if (strip >= td->td_stripsperimage && imagegrew) |
td->td_stripsperimage = |
TIFFhowmany_32(td->td_imagelength,td->td_rowsperstrip); |
+ if (td->td_stripsperimage == 0) { |
+ TIFFErrorExt(tif->tif_clientdata, module, "Zero strips per image"); |
+ return (-1); |
+ } |
tif->tif_row = |
(strip % td->td_stripsperimage) * td->td_rowsperstrip; |
if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { |
@@ -220,6 +224,11 @@ TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc) |
tif->tif_flags |= TIFF_BUF4WRITE; |
tif->tif_curstrip = strip; |
+ if (td->td_stripsperimage == 0) { |
+ TIFFErrorExt(tif->tif_clientdata, module, "Zero strips per image"); |
+ return ((tmsize_t) -1); |
+ } |
+ |
tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; |
if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { |
if (!(*tif->tif_setupencode)(tif)) |
@@ -311,6 +320,10 @@ TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc) |
return ((tmsize_t) -1); |
} |
tif->tif_curstrip = strip; |
+ if (td->td_stripsperimage == 0) { |
+ TIFFErrorExt(tif->tif_clientdata, module,"Zero strips per image"); |
+ return ((tmsize_t) -1); |
+ } |
tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; |
return (TIFFAppendToStrip(tif, strip, (uint8*) data, cc) ? |
cc : (tmsize_t) -1); |
@@ -353,6 +366,7 @@ TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) |
static const char module[] = "TIFFWriteEncodedTile"; |
TIFFDirectory *td; |
uint16 sample; |
+ uint32 howmany32; |
if (!WRITECHECKTILES(tif, module)) |
return ((tmsize_t)(-1)); |
@@ -379,7 +393,7 @@ TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) |
/* more bytes available in the output buffer than the previous byte count, */ |
/* so that TIFFAppendToStrip() will detect the overflow when it is called the first */ |
/* time if the new compressed tile is bigger than the older one. (GDAL #4771) */ |
- if( tif->tif_rawdatasize <= (tmsize_t)td->td_stripbytecount[tile] ) |
+ if( tif->tif_rawdatasize <= (tmsize_t) td->td_stripbytecount[tile] ) |
{ |
if( !(TIFFWriteBufferSetup(tif, NULL, |
(tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[tile] + 1), 1024))) ) |
@@ -391,17 +405,25 @@ TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) |
tif->tif_curoff = 0; |
} |
- tif->tif_rawcc = 0; |
- tif->tif_rawcp = tif->tif_rawdata; |
+ tif->tif_rawcc = 0; |
+ tif->tif_rawcp = tif->tif_rawdata; |
/* |
* Compute tiles per row & per column to compute |
* current row and column |
*/ |
- tif->tif_row = (tile % TIFFhowmany_32(td->td_imagelength, td->td_tilelength)) |
- * td->td_tilelength; |
- tif->tif_col = (tile % TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth)) |
- * td->td_tilewidth; |
+ howmany32=TIFFhowmany_32(td->td_imagelength, td->td_tilelength); |
+ if (howmany32 == 0) { |
+ TIFFErrorExt(tif->tif_clientdata,module,"Zero tiles"); |
+ return ((tmsize_t)(-1)); |
+ } |
+ tif->tif_row = (tile % howmany32) * td->td_tilelength; |
+ howmany32=TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth); |
+ if (howmany32 == 0) { |
+ TIFFErrorExt(tif->tif_clientdata,module,"Zero tiles"); |
+ return ((tmsize_t)(-1)); |
+ } |
+ tif->tif_col = (tile % howmany32) * td->td_tilewidth; |
if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { |
if (!(*tif->tif_setupencode)(tif)) |
@@ -769,4 +791,3 @@ TIFFSetWriteOffset(TIFF* tif, toff_t off) |
* fill-column: 78 |
* End: |
*/ |
- |