git: a52fed3d45da - main - graphics/tiff: Update to 4.4.0
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 16 Aug 2022 21:45:49 UTC
The branch main has been updated by diizzy: URL: https://cgit.FreeBSD.org/ports/commit/?id=a52fed3d45da977bbd6a1ef7e2c4ea338433ad0b commit a52fed3d45da977bbd6a1ef7e2c4ea338433ad0b Author: Daniel Engberg <diizzy@FreeBSD.org> AuthorDate: 2022-08-16 21:20:07 +0000 Commit: Daniel Engberg <diizzy@FreeBSD.org> CommitDate: 2022-08-16 21:45:38 +0000 graphics/tiff: Update to 4.4.0 * Add libdeflate for improved performance as dependency * Add zstd as dependency, this is the default in Alpine, Arch Linux, Debian, Fedora and OpenSUSE * Backport upstream commit dd1bcc7abb26094e93636e85520f0d8f81ab0fab to fix CVE-2022-2056, CVE-2022-2057 and CVE-2022-2058 * Backport upstream commit 275735d0354e39c0ac1dc3c0db2120d6f31d1990 to fix CVE-2022-34526 PR: 265164 Approved by: portmgr (antoine) Exp-run by: antoine --- graphics/tiff/Makefile | 13 +- graphics/tiff/distinfo | 6 +- ...git-01-dd1bcc7abb26094e93636e85520f0d8f81ab0fab | 180 +++++++++++++++++++++ ...git-02-275735d0354e39c0ac1dc3c0db2120d6f31d1990 | 28 ++++ graphics/tiff/pkg-plist | 4 +- 5 files changed, 219 insertions(+), 12 deletions(-) diff --git a/graphics/tiff/Makefile b/graphics/tiff/Makefile index 5ab1e4844369..0d7560b7b6a0 100644 --- a/graphics/tiff/Makefile +++ b/graphics/tiff/Makefile @@ -1,5 +1,5 @@ PORTNAME= tiff -PORTVERSION= 4.3.0 +DISTVERSION= 4.4.0 CATEGORIES= graphics MASTER_SITES= https://download.osgeo.org/libtiff/ @@ -9,19 +9,18 @@ COMMENT= Tools and library routines for working with TIFF images LICENSE= BSD3CLAUSE LICENSE_FILE= ${WRKSRC}/COPYRIGHT -LIB_DEPENDS= libjbig.so:graphics/jbigkit +LIB_DEPENDS= libdeflate.so:archivers/libdeflate \ + libjbig.so:graphics/jbigkit \ + libzstd.so:archivers/zstd -USES= cpe jpeg libtool pathfix +USES= cpe jpeg libtool localbase pathfix tar:xz CPE_PRODUCT= libtiff CPE_VERSION= ${DISTVERSION:C/[a-z]+//} CPE_UPDATE= ${DISTVERSION:C/[0-9.]+//} USE_LDCONFIG= yes GNU_CONFIGURE= yes -CONFIGURE_ARGS+= --with-jpeg-include-dir=${LOCALBASE}/include \ - --with-jpeg-lib-dir=${LOCALBASE}/lib \ - --without-x \ +CONFIGURE_ARGS= --without-x \ --disable-webp \ - --disable-zstd INSTALL_TARGET= install-strip TEST_TARGET= check diff --git a/graphics/tiff/distinfo b/graphics/tiff/distinfo index ce00da3334f7..992f30c8463b 100644 --- a/graphics/tiff/distinfo +++ b/graphics/tiff/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1619212569 -SHA256 (tiff-4.3.0.tar.gz) = 0e46e5acb087ce7d1ac53cf4f56a09b221537fc86dfc5daaad1c2e89e1b37ac8 -SIZE (tiff-4.3.0.tar.gz) = 2808254 +TIMESTAMP = 1657611207 +SHA256 (tiff-4.4.0.tar.xz) = 49307b510048ccc7bc40f2cba6e8439182fe6e654057c1a1683139bf2ecb1dc1 +SIZE (tiff-4.4.0.tar.xz) = 1929292 diff --git a/graphics/tiff/files/patch-git-01-dd1bcc7abb26094e93636e85520f0d8f81ab0fab b/graphics/tiff/files/patch-git-01-dd1bcc7abb26094e93636e85520f0d8f81ab0fab new file mode 100644 index 000000000000..85ccf0401568 --- /dev/null +++ b/graphics/tiff/files/patch-git-01-dd1bcc7abb26094e93636e85520f0d8f81ab0fab @@ -0,0 +1,180 @@ +From dd1bcc7abb26094e93636e85520f0d8f81ab0fab Mon Sep 17 00:00:00 2001 +From: 4ugustus <wangdw.augustus@qq.com> +Date: Sat, 11 Jun 2022 09:31:43 +0000 +Subject: [PATCH] fix the FPE in tiffcrop (#415, #427, and #428) + +--- + libtiff/tif_aux.c | 9 +++++++ + libtiff/tiffiop.h | 1 + + tools/tiffcrop.c | 62 ++++++++++++++++++++++++++--------------------- + 3 files changed, 44 insertions(+), 28 deletions(-) + +diff --git a/libtiff/tif_aux.c b/libtiff/tif_aux.c +index 140f26c7..5b88c8d0 100644 +--- libtiff/tif_aux.c ++++ libtiff/tif_aux.c +@@ -402,6 +402,15 @@ float _TIFFClampDoubleToFloat( double val ) + return (float)val; + } + ++uint32_t _TIFFClampDoubleToUInt32(double val) ++{ ++ if( val < 0 ) ++ return 0; ++ if( val > 0xFFFFFFFFU || val != val ) ++ return 0xFFFFFFFFU; ++ return (uint32_t)val; ++} ++ + int _TIFFSeekOK(TIFF* tif, toff_t off) + { + /* Huge offsets, especially -1 / UINT64_MAX, can cause issues */ +diff --git a/libtiff/tiffiop.h b/libtiff/tiffiop.h +index e3af461d..4e8bdac2 100644 +--- libtiff/tiffiop.h ++++ libtiff/tiffiop.h +@@ -365,6 +365,7 @@ extern double _TIFFUInt64ToDouble(uint64_t); + extern float _TIFFUInt64ToFloat(uint64_t); + + extern float _TIFFClampDoubleToFloat(double); ++extern uint32_t _TIFFClampDoubleToUInt32(double); + + extern tmsize_t + _TIFFReadEncodedStripAndAllocBuffer(TIFF* tif, uint32_t strip, +diff --git a/tools/tiffcrop.c b/tools/tiffcrop.c +index 1f827b2b..90286a5e 100644 +--- tools/tiffcrop.c ++++ tools/tiffcrop.c +@@ -5268,17 +5268,17 @@ computeInputPixelOffsets(struct crop_mask *crop, struct image_data *image, + { + if ((crop->res_unit == RESUNIT_INCH) || (crop->res_unit == RESUNIT_CENTIMETER)) + { +- x1 = (uint32_t) (crop->corners[i].X1 * scale * xres); +- x2 = (uint32_t) (crop->corners[i].X2 * scale * xres); +- y1 = (uint32_t) (crop->corners[i].Y1 * scale * yres); +- y2 = (uint32_t) (crop->corners[i].Y2 * scale * yres); ++ x1 = _TIFFClampDoubleToUInt32(crop->corners[i].X1 * scale * xres); ++ x2 = _TIFFClampDoubleToUInt32(crop->corners[i].X2 * scale * xres); ++ y1 = _TIFFClampDoubleToUInt32(crop->corners[i].Y1 * scale * yres); ++ y2 = _TIFFClampDoubleToUInt32(crop->corners[i].Y2 * scale * yres); + } + else + { +- x1 = (uint32_t) (crop->corners[i].X1); +- x2 = (uint32_t) (crop->corners[i].X2); +- y1 = (uint32_t) (crop->corners[i].Y1); +- y2 = (uint32_t) (crop->corners[i].Y2); ++ x1 = _TIFFClampDoubleToUInt32(crop->corners[i].X1); ++ x2 = _TIFFClampDoubleToUInt32(crop->corners[i].X2); ++ y1 = _TIFFClampDoubleToUInt32(crop->corners[i].Y1); ++ y2 = _TIFFClampDoubleToUInt32(crop->corners[i].Y2); + } + /* a) Region needs to be within image sizes 0.. width-1; 0..length-1 + * b) Corners are expected to be submitted as top-left to bottom-right. +@@ -5357,17 +5357,17 @@ computeInputPixelOffsets(struct crop_mask *crop, struct image_data *image, + { + if (crop->res_unit != RESUNIT_INCH && crop->res_unit != RESUNIT_CENTIMETER) + { /* User has specified pixels as reference unit */ +- tmargin = (uint32_t)(crop->margins[0]); +- lmargin = (uint32_t)(crop->margins[1]); +- bmargin = (uint32_t)(crop->margins[2]); +- rmargin = (uint32_t)(crop->margins[3]); ++ tmargin = _TIFFClampDoubleToUInt32(crop->margins[0]); ++ lmargin = _TIFFClampDoubleToUInt32(crop->margins[1]); ++ bmargin = _TIFFClampDoubleToUInt32(crop->margins[2]); ++ rmargin = _TIFFClampDoubleToUInt32(crop->margins[3]); + } + else + { /* inches or centimeters specified */ +- tmargin = (uint32_t)(crop->margins[0] * scale * yres); +- lmargin = (uint32_t)(crop->margins[1] * scale * xres); +- bmargin = (uint32_t)(crop->margins[2] * scale * yres); +- rmargin = (uint32_t)(crop->margins[3] * scale * xres); ++ tmargin = _TIFFClampDoubleToUInt32(crop->margins[0] * scale * yres); ++ lmargin = _TIFFClampDoubleToUInt32(crop->margins[1] * scale * xres); ++ bmargin = _TIFFClampDoubleToUInt32(crop->margins[2] * scale * yres); ++ rmargin = _TIFFClampDoubleToUInt32(crop->margins[3] * scale * xres); + } + + if ((lmargin + rmargin) > image->width) +@@ -5397,24 +5397,24 @@ computeInputPixelOffsets(struct crop_mask *crop, struct image_data *image, + if (crop->res_unit != RESUNIT_INCH && crop->res_unit != RESUNIT_CENTIMETER) + { + if (crop->crop_mode & CROP_WIDTH) +- width = (uint32_t)crop->width; ++ width = _TIFFClampDoubleToUInt32(crop->width); + else + width = image->width - lmargin - rmargin; + + if (crop->crop_mode & CROP_LENGTH) +- length = (uint32_t)crop->length; ++ length = _TIFFClampDoubleToUInt32(crop->length); + else + length = image->length - tmargin - bmargin; + } + else + { + if (crop->crop_mode & CROP_WIDTH) +- width = (uint32_t)(crop->width * scale * image->xres); ++ width = _TIFFClampDoubleToUInt32(crop->width * scale * image->xres); + else + width = image->width - lmargin - rmargin; + + if (crop->crop_mode & CROP_LENGTH) +- length = (uint32_t)(crop->length * scale * image->yres); ++ length = _TIFFClampDoubleToUInt32(crop->length * scale * image->yres); + else + length = image->length - tmargin - bmargin; + } +@@ -5868,13 +5868,13 @@ computeOutputPixelOffsets (struct crop_mask *crop, struct image_data *image, + { + if (page->res_unit == RESUNIT_INCH || page->res_unit == RESUNIT_CENTIMETER) + { /* inches or centimeters specified */ +- hmargin = (uint32_t)(page->hmargin * scale * page->hres * ((image->bps + 7) / 8)); +- vmargin = (uint32_t)(page->vmargin * scale * page->vres * ((image->bps + 7) / 8)); ++ hmargin = _TIFFClampDoubleToUInt32(page->hmargin * scale * page->hres * ((image->bps + 7) / 8)); ++ vmargin = _TIFFClampDoubleToUInt32(page->vmargin * scale * page->vres * ((image->bps + 7) / 8)); + } + else + { /* Otherwise user has specified pixels as reference unit */ +- hmargin = (uint32_t)(page->hmargin * scale * ((image->bps + 7) / 8)); +- vmargin = (uint32_t)(page->vmargin * scale * ((image->bps + 7) / 8)); ++ hmargin = _TIFFClampDoubleToUInt32(page->hmargin * scale * ((image->bps + 7) / 8)); ++ vmargin = _TIFFClampDoubleToUInt32(page->vmargin * scale * ((image->bps + 7) / 8)); + } + + if ((hmargin * 2.0) > (pwidth * page->hres)) +@@ -5912,13 +5912,13 @@ computeOutputPixelOffsets (struct crop_mask *crop, struct image_data *image, + { + if (page->mode & PAGE_MODE_PAPERSIZE ) + { +- owidth = (uint32_t)((pwidth * page->hres) - (hmargin * 2)); +- olength = (uint32_t)((plength * page->vres) - (vmargin * 2)); ++ owidth = _TIFFClampDoubleToUInt32((pwidth * page->hres) - (hmargin * 2)); ++ olength = _TIFFClampDoubleToUInt32((plength * page->vres) - (vmargin * 2)); + } + else + { +- owidth = (uint32_t)(iwidth - (hmargin * 2 * page->hres)); +- olength = (uint32_t)(ilength - (vmargin * 2 * page->vres)); ++ owidth = _TIFFClampDoubleToUInt32(iwidth - (hmargin * 2 * page->hres)); ++ olength = _TIFFClampDoubleToUInt32(ilength - (vmargin * 2 * page->vres)); + } + } + +@@ -5927,6 +5927,12 @@ computeOutputPixelOffsets (struct crop_mask *crop, struct image_data *image, + if (olength > ilength) + olength = ilength; + ++ if (owidth == 0 || olength == 0) ++ { ++ TIFFError("computeOutputPixelOffsets", "Integer overflow when calculating the number of pages"); ++ exit(EXIT_FAILURE); ++ } ++ + /* Compute the number of pages required for Portrait or Landscape */ + switch (page->orient) + { +-- +GitLab + diff --git a/graphics/tiff/files/patch-git-02-275735d0354e39c0ac1dc3c0db2120d6f31d1990 b/graphics/tiff/files/patch-git-02-275735d0354e39c0ac1dc3c0db2120d6f31d1990 new file mode 100644 index 000000000000..f86cd7151086 --- /dev/null +++ b/graphics/tiff/files/patch-git-02-275735d0354e39c0ac1dc3c0db2120d6f31d1990 @@ -0,0 +1,28 @@ +From 275735d0354e39c0ac1dc3c0db2120d6f31d1990 Mon Sep 17 00:00:00 2001 +From: Even Rouault <even.rouault@spatialys.com> +Date: Mon, 27 Jun 2022 16:09:43 +0200 +Subject: [PATCH] _TIFFCheckFieldIsValidForCodec(): return FALSE when passed a + codec-specific tag and the codec is not configured (fixes #433) + +This avoids crashes when querying such tags +--- + libtiff/tif_dirinfo.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/libtiff/tif_dirinfo.c b/libtiff/tif_dirinfo.c +index c30f569b..3371cb5c 100644 +--- libtiff/tif_dirinfo.c ++++ libtiff/tif_dirinfo.c +@@ -1191,6 +1191,9 @@ _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag) + default: + return 1; + } ++ if( !TIFFIsCODECConfigured(tif->tif_dir.td_compression) ) { ++ return 0; ++ } + /* Check if codec specific tags are allowed for the current + * compression scheme (codec) */ + switch (tif->tif_dir.td_compression) { +-- +GitLab + diff --git a/graphics/tiff/pkg-plist b/graphics/tiff/pkg-plist index 3f0a450a7194..11a80fd32089 100644 --- a/graphics/tiff/pkg-plist +++ b/graphics/tiff/pkg-plist @@ -24,11 +24,11 @@ include/tiffvers.h lib/libtiff.a lib/libtiff.so lib/libtiff.so.5 -lib/libtiff.so.5.7.0 +lib/libtiff.so.5.8.0 lib/libtiffxx.a lib/libtiffxx.so lib/libtiffxx.so.5 -lib/libtiffxx.so.5.7.0 +lib/libtiffxx.so.5.8.0 libdata/pkgconfig/libtiff-4.pc man/man1/fax2ps.1.gz man/man1/fax2tiff.1.gz