125 lines
4.2 KiB
Diff
125 lines
4.2 KiB
Diff
--- tiff-4.0.6/libtiff/tif_read.c 2015-08-29 00:16:22.656727936 +0200
|
|
+++ tiff-4.0.6/libtiff/tif_read.c 2016-07-12 10:16:48.693897925 +0200
|
|
@@ -38,6 +38,8 @@
|
|
static int TIFFCheckRead(TIFF*, int);
|
|
static tmsize_t
|
|
TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size,const char* module);
|
|
+static tmsize_t
|
|
+TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* module);
|
|
|
|
#define NOSTRIP ((uint32)(-1)) /* undefined state */
|
|
#define NOTILE ((uint32)(-1)) /* undefined state */
|
|
@@ -350,6 +352,24 @@
|
|
stripsize=TIFFVStripSize(tif,rows);
|
|
if (stripsize==0)
|
|
return((tmsize_t)(-1));
|
|
+
|
|
+ /* shortcut to avoid an extra memcpy() */
|
|
+ if( td->td_compression == COMPRESSION_NONE &&
|
|
+ size!=(tmsize_t)(-1) && size >= stripsize &&
|
|
+ !isMapped(tif) &&
|
|
+ ((tif->tif_flags&TIFF_NOREADRAW)==0) )
|
|
+ {
|
|
+ if (TIFFReadRawStrip1(tif, strip, buf, stripsize, module) != stripsize)
|
|
+ return ((tmsize_t)(-1));
|
|
+
|
|
+ if (!isFillOrder(tif, td->td_fillorder) &&
|
|
+ (tif->tif_flags & TIFF_NOBITREV) == 0)
|
|
+ TIFFReverseBits(buf,stripsize);
|
|
+
|
|
+ (*tif->tif_postdecode)(tif,buf,stripsize);
|
|
+ return (stripsize);
|
|
+ }
|
|
+
|
|
if ((size!=(tmsize_t)(-1))&&(size<stripsize))
|
|
stripsize=size;
|
|
if (!TIFFFillStrip(tif,strip))
|
|
@@ -661,6 +681,24 @@
|
|
(unsigned long) tile, (unsigned long) td->td_nstrips);
|
|
return ((tmsize_t)(-1));
|
|
}
|
|
+
|
|
+ /* shortcut to avoid an extra memcpy() */
|
|
+ if( td->td_compression == COMPRESSION_NONE &&
|
|
+ size!=(tmsize_t)(-1) && size >= tilesize &&
|
|
+ !isMapped(tif) &&
|
|
+ ((tif->tif_flags&TIFF_NOREADRAW)==0) )
|
|
+ {
|
|
+ if (TIFFReadRawTile1(tif, tile, buf, tilesize, module) != tilesize)
|
|
+ return ((tmsize_t)(-1));
|
|
+
|
|
+ if (!isFillOrder(tif, td->td_fillorder) &&
|
|
+ (tif->tif_flags & TIFF_NOBITREV) == 0)
|
|
+ TIFFReverseBits(buf,tilesize);
|
|
+
|
|
+ (*tif->tif_postdecode)(tif,buf,tilesize);
|
|
+ return (tilesize);
|
|
+ }
|
|
+
|
|
if (size == (tmsize_t)(-1))
|
|
size = tilesize;
|
|
else if (size > tilesize)
|
|
--- tiff-4.0.6/libtiff/tif_write.c 2015-08-29 00:16:22.761805698 +0200
|
|
+++ tiff-4.0.6/libtiff/tif_write.c 2016-07-12 10:16:48.693897925 +0200
|
|
@@ -258,6 +258,23 @@
|
|
tif->tif_rawcp = tif->tif_rawdata;
|
|
|
|
tif->tif_flags &= ~TIFF_POSTENCODE;
|
|
+
|
|
+ /* shortcut to avoid an extra memcpy() */
|
|
+ if( td->td_compression == COMPRESSION_NONE )
|
|
+ {
|
|
+ /* swab if needed - note that source buffer will be altered */
|
|
+ tif->tif_postdecode( tif, (uint8*) data, cc );
|
|
+
|
|
+ if (!isFillOrder(tif, td->td_fillorder) &&
|
|
+ (tif->tif_flags & TIFF_NOBITREV) == 0)
|
|
+ TIFFReverseBits((uint8*) data, cc);
|
|
+
|
|
+ if (cc > 0 &&
|
|
+ !TIFFAppendToStrip(tif, strip, (uint8*) data, cc))
|
|
+ return ((tmsize_t) -1);
|
|
+ return (cc);
|
|
+ }
|
|
+
|
|
sample = (uint16)(strip / td->td_stripsperimage);
|
|
if (!(*tif->tif_preencode)(tif, sample))
|
|
return ((tmsize_t) -1);
|
|
@@ -431,9 +448,7 @@
|
|
tif->tif_flags |= TIFF_CODERSETUP;
|
|
}
|
|
tif->tif_flags &= ~TIFF_POSTENCODE;
|
|
- sample = (uint16)(tile/td->td_stripsperimage);
|
|
- if (!(*tif->tif_preencode)(tif, sample))
|
|
- return ((tmsize_t)(-1));
|
|
+
|
|
/*
|
|
* Clamp write amount to the tile size. This is mostly
|
|
* done so that callers can pass in some large number
|
|
@@ -442,6 +457,25 @@
|
|
if ( cc < 1 || cc > tif->tif_tilesize)
|
|
cc = tif->tif_tilesize;
|
|
|
|
+ /* shortcut to avoid an extra memcpy() */
|
|
+ if( td->td_compression == COMPRESSION_NONE )
|
|
+ {
|
|
+ /* swab if needed - note that source buffer will be altered */
|
|
+ tif->tif_postdecode( tif, (uint8*) data, cc );
|
|
+
|
|
+ if (!isFillOrder(tif, td->td_fillorder) &&
|
|
+ (tif->tif_flags & TIFF_NOBITREV) == 0)
|
|
+ TIFFReverseBits((uint8*) data, cc);
|
|
+
|
|
+ if (cc > 0 &&
|
|
+ !TIFFAppendToStrip(tif, tile, (uint8*) data, cc))
|
|
+ return ((tmsize_t) -1);
|
|
+ return (cc);
|
|
+ }
|
|
+
|
|
+ sample = (uint16)(tile/td->td_stripsperimage);
|
|
+ if (!(*tif->tif_preencode)(tif, sample))
|
|
+ return ((tmsize_t)(-1));
|
|
/* swab if needed - note that source buffer will be altered */
|
|
tif->tif_postdecode( tif, (uint8*) data, cc );
|
|
|