diff options
author | Even Rouault <even.rouault@spatialys.com> | 2020-11-12 15:52:43 +0000 |
---|---|---|
committer | Even Rouault <even.rouault@spatialys.com> | 2020-11-12 15:52:43 +0000 |
commit | d167fbb6af40ab874792fa48ff376546ef431890 (patch) | |
tree | 186d04d310b66e6bb4f8a3c1eaaa0919ea5b7302 | |
parent | 2e822691d750c01cec5b5cc4ee73567a204ab2a3 (diff) | |
parent | c8d613ef497058fe653c467fc84c70a62a4a71b2 (diff) | |
download | libtiff-git-d167fbb6af40ab874792fa48ff376546ef431890.tar.gz |
Merge branch 'issue-211' into 'master'
check for tile width overflow
Closes #211
See merge request libtiff/libtiff!160
-rw-r--r-- | libtiff/tif_dir.c | 4 | ||||
-rw-r--r-- | libtiff/tif_getimage.c | 17 |
2 files changed, 15 insertions, 6 deletions
diff --git a/libtiff/tif_dir.c b/libtiff/tif_dir.c index ba8ba2e7..347b7115 100644 --- a/libtiff/tif_dir.c +++ b/libtiff/tif_dir.c @@ -394,7 +394,7 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) if (tif->tif_mode != O_RDONLY) goto badvalue32; TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "Nonstandard tile width %d, convert file", v32); + "Nonstandard tile width %u, convert file", v32); } td->td_tilewidth = v32; tif->tif_flags |= TIFF_ISTILED; @@ -405,7 +405,7 @@ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) if (tif->tif_mode != O_RDONLY) goto badvalue32; TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "Nonstandard tile length %d, convert file", v32); + "Nonstandard tile length %u, convert file", v32); } td->td_tilelength = v32; tif->tif_flags |= TIFF_ISTILED; diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c index 4da785d3..96ab1460 100644 --- a/libtiff/tif_getimage.c +++ b/libtiff/tif_getimage.c @@ -29,6 +29,7 @@ */ #include "tiffiop.h" #include <stdio.h> +#include <limits.h> static int gtTileContig(TIFFRGBAImage*, uint32*, uint32, uint32); static int gtTileSeparate(TIFFRGBAImage*, uint32*, uint32, uint32); @@ -645,12 +646,20 @@ gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) flip = setorientation(img); if (flip & FLIP_VERTICALLY) { - y = h - 1; - toskew = -(int32)(tw + w); + if ((tw + w) > INT_MAX) { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", "unsupported tile size (too wide)"); + return (0); + } + y = h - 1; + toskew = -(int32)(tw + w); } else { - y = 0; - toskew = -(int32)(tw - w); + if (tw > (INT_MAX + w)) { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", "unsupported tile size (too wide)"); + return (0); + } + y = 0; + toskew = -(int32)(tw - w); } /* |