Fix an integer overflow TIFFYCbCrtoRGB(): https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1844 3rd party Git reference: https://github.com/vadz/libtiff/commit/02669064e927074819ce1ed39aba0fccaa167717 2017-05-29 Even Rouault * libtiff/tif_color.c: TIFFYCbCrToRGBInit(): stricter clamping to avoid int32 overflow in TIFFYCbCrtoRGB(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=1844 Credit to OSS Fuzz /cvs/maptools/cvsroot/libtiff/ChangeLog,v <-- ChangeLog new revision: 1.1241; previous revision: 1.1240 /cvs/maptools/cvsroot/libtiff/libtiff/tif_color.c,v <-- libtiff/tif_color.c new revision: 1.24; previous revision: 1.23 Index: libtiff/libtiff/tif_color.c =================================================================== RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_color.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- libtiff/libtiff/tif_color.c 13 May 2017 18:17:34 -0000 1.23 +++ libtiff/libtiff/tif_color.c 29 May 2017 10:12:54 -0000 1.24 @@ -1,4 +1,4 @@ -/* $Id: tif_color.c,v 1.23 2017-05-13 18:17:34 erouault Exp $ */ +/* $Id: tif_color.c,v 1.24 2017-05-29 10:12:54 erouault Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -275,10 +275,10 @@ for (i = 0, x = -128; i < 256; i++, x++) { int32 Cr = (int32)CLAMPw(Code2V(x, refBlackWhite[4] - 128.0F, refBlackWhite[5] - 128.0F, 127), - -128.0F * 64, 128.0F * 64); + -128.0F * 32, 128.0F * 32); int32 Cb = (int32)CLAMPw(Code2V(x, refBlackWhite[2] - 128.0F, refBlackWhite[3] - 128.0F, 127), - -128.0F * 64, 128.0F * 64); + -128.0F * 32, 128.0F * 32); ycbcr->Cr_r_tab[i] = (int32)((D1*Cr + ONE_HALF)>>SHIFT); ycbcr->Cb_b_tab[i] = (int32)((D3*Cb + ONE_HALF)>>SHIFT); @@ -286,7 +286,7 @@ ycbcr->Cb_g_tab[i] = D4*Cb + ONE_HALF; ycbcr->Y_tab[i] = (int32)CLAMPw(Code2V(x + 128, refBlackWhite[0], refBlackWhite[1], 255), - -128.0F * 64, 128.0F * 64); + -128.0F * 32, 128.0F * 32); } }