Imported Upstream version 4.1.0 into tizen
[platform/upstream/tiff.git] / tools / tiffcp.c
index 2f406e2..84d8148 100755 (executable)
@@ -41,6 +41,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 
 #include <ctype.h>
 
@@ -51,7 +52,7 @@
 #include "tiffio.h"
 
 #ifndef HAVE_GETOPT
-extern int getopt(int, char**, char*);
+extern int getopt(int argc, char * const argv[], const char *optstring);
 #endif
 
 #if defined(VMS)
@@ -1408,7 +1409,7 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
        int status = 1;
        uint32 imagew = TIFFRasterScanlineSize(in);
        uint32 tilew = TIFFTileRowSize(in);
-       int iskew  = imagew - tilew*spp;
+       int iskew;
        tsize_t tilesize = TIFFTileSize(in);
        tdata_t tilebuf;
        uint8* bufp = (uint8*) buf;
@@ -1416,6 +1417,12 @@ DECLAREreadFunc(readSeparateTilesIntoBuffer)
        uint32 row;
        uint16 bps = 0, bytes_per_sample;
 
+       if (spp > (INT_MAX / tilew))
+       {
+               TIFFError(TIFFFileName(in), "Error, cannot handle that much samples per tile row (Tile Width * Samples/Pixel)");
+               return 0;
+       }
+       iskew = imagew - tilew*spp;
        tilebuf = _TIFFmalloc(tilesize);
        if (tilebuf == 0)
                return 0;