|
| 1 | +commit 782a11d6b5b61c6dc21e714950a4af5bf89f023c |
| 2 | +Author: Even Rouault <even.rouault@spatialys.com> |
| 3 | +Date: Sun Feb 22 23:32:47 2026 +0100 |
| 4 | + |
| 5 | + TIFFReadRGBAImage(): prevent integer overflow and later heap overflow on images with huge width in YCbCr tile decoding functions |
| 6 | + |
| 7 | + Fixes https://gitlab.com/libtiff/libtiff/-/issues/787 |
| 8 | + |
| 9 | +diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c |
| 10 | +index 4543ddda..fa82d091 100644 |
| 11 | +--- libtiff/tif_getimage.c |
| 12 | ++++ libtiff/tif_getimage.c |
| 13 | +@@ -2224,7 +2224,7 @@ DECLAREContigPutFunc(putcontig8bitYCbCr44tile) |
| 14 | + uint32_t *cp1 = cp + w + toskew; |
| 15 | + uint32_t *cp2 = cp1 + w + toskew; |
| 16 | + uint32_t *cp3 = cp2 + w + toskew; |
| 17 | +- int32_t incr = 3 * w + 4 * toskew; |
| 18 | ++ const tmsize_t incr = 3 * (tmsize_t)w + 4 * (tmsize_t)toskew; |
| 19 | + |
| 20 | + (void)y; |
| 21 | + /* adjust fromskew */ |
| 22 | +@@ -2364,7 +2364,7 @@ DECLAREContigPutFunc(putcontig8bitYCbCr44tile) |
| 23 | + DECLAREContigPutFunc(putcontig8bitYCbCr42tile) |
| 24 | + { |
| 25 | + uint32_t *cp1 = cp + w + toskew; |
| 26 | +- int32_t incr = 2 * toskew + w; |
| 27 | ++ const tmsize_t incr = 2 * (tmsize_t)toskew + w; |
| 28 | + |
| 29 | + (void)y; |
| 30 | + fromskew = (fromskew / 4) * (4 * 2 + 2); |
| 31 | +@@ -2522,7 +2522,7 @@ DECLAREContigPutFunc(putcontig8bitYCbCr41tile) |
| 32 | + DECLAREContigPutFunc(putcontig8bitYCbCr22tile) |
| 33 | + { |
| 34 | + uint32_t *cp2; |
| 35 | +- int32_t incr = 2 * toskew + w; |
| 36 | ++ const tmsize_t incr = 2 * (tmsize_t)toskew + w; |
| 37 | + (void)y; |
| 38 | + fromskew = (fromskew / 2) * (2 * 2 + 2); |
| 39 | + cp2 = cp + w + toskew; |
| 40 | +@@ -2625,7 +2625,7 @@ DECLAREContigPutFunc(putcontig8bitYCbCr21tile) |
| 41 | + DECLAREContigPutFunc(putcontig8bitYCbCr12tile) |
| 42 | + { |
| 43 | + uint32_t *cp2; |
| 44 | +- int32_t incr = 2 * toskew + w; |
| 45 | ++ const tmsize_t incr = 2 * (tmsize_t)toskew + w; |
| 46 | + (void)y; |
| 47 | + fromskew = (fromskew / 1) * (1 * 2 + 2); |
| 48 | + cp2 = cp + w + toskew; |
0 commit comments