# Changes in TIFF v4.7.1

References
Current Version | v4.7.1 (tag v4.7.1)
Previous Version | v4.7.0
Primary Download Site | https://download.osgeo.org/libtiff/
Home HTTP Site #1 | http://www.simplesystems.org/libtiff/
Home HTTP Site #2 | https://libtiff.gitlab.io/libtiff/

This document provides a summary of significant changes made to the software between the previous and current versions (see above). A fully-detailed change summary is provided by the `ChangeLog` file included in the release package and by the Git commit history.

## Major changes

None

## Software configuration changes

- Define HAVE_JPEGTURBO_DUAL_MODE_8_12 and LERC_STATIC in tif_config.h.

- CMake: define WORDS_BIGENDIAN via tif_config.h

- doc/CMakeLists.txt: remove useless cmake_minimum_required()

- CMake: fix build with LLVM/Clang 17 (fixes issue #651)

- CMake: set CMP0074 new policy

- Set LINKER_LANGUAGE for C targets with C deps

- Export tiffxx cmake target (fixes issue #674)

- autogen.sh: Enable verbose wget.

- configure.ac: Syntax updates for Autoconf 2.71

- autogen.sh: Re-implement based on autoreconf. Failure to update config.guess/config.sub does not return error (fixes issue #672)

- CMake: fix CMake 4.0 warning when minimum required version is < 3.10.

- CMake: Add build option tiff-static (fixes issue #709)

## Library changes

New/improved functionalities:

- Add TIFFOpenOptionsSetWarnAboutUnknownTags() for explicit control about emitting warnings for unknown tags. No longer emit warnings about unknown tags by default

- tif_predict.c: speed-up decompression in some cases.

API/ABI breaks:

- None

Bug fixes:

- tif_fax3: For fax group 3 data if no EOL is detected, reading is retried without synchronisation for EOLs. (fixes issue #54)

- Updating TIFFMergeFieldInfo() with read_count=write_count=0 for FIELD_IGNORE. Updating TIFFMergeFieldInfo() with read_count=write_count=0 for FIELD_IGNORE. Improving handling when field_name = NULL. (fixes issue #532)

- tiff.h: add COMPRESSION_JXL_DNG_1_7=52546 as used for JPEGXL compression in the DNG 1.7 specification

- TIFFWriteDirectorySec: Increment string length for ASCII tags for codec tags defined with FIELD_xxx bits, as it is done for FIELD_CUSTOM tags. (fixes issue #648)

- Do not error out on a tag whose tag count value is zero, just issue a warning. Fix parsing a private tag 0x80a6 (fixes issue #647)

- TIFFDefaultTransferFunction(): give up beyond td_bitspersample = 24 (Fixes https://github.com/OSGeo/gdal/issues/10875)

- tif_getimage.c: Remove unnecessary calls to TIFFRGBAImageOK() (fixes issue #175)

- Fix writing a Predictor=3 file with non-native endianness

- _TIFFVSetField(): fix potential use of unallocated memory (out-of-bounds

    read / nullptr dereference) in case of out-of-memory situation when dealing with custom tags (fixes issue #663)

- tif_fax3.c: Error out for CCITT fax encoding if SamplesPerPixel is not equal 1 and PlanarConfiguration = Contiguous (fixes issue #26)

- tif_fax3.c: error out after a number of times end-of-line or unexpected bad code words have been reached. (fixes issue #670)

- Fix memory leak in TIFFSetupStrips() (fixes issue #665)

- tif_zip.c: Provide zlib allocation functions. Otherwise for zlib built with -DZ_SOLO inflating will fail.

- Fix memory leak in _TIFFSetDefaultCompressionState. (fixes issue #676)

- tif_predict.c: Don’t overwrite input buffer of TIFFWriteScanline() if "prediction" is enabled. Use extra working buffer in PredictorEncodeRow(). (fixes issue #5)

- tif_getimage.c: update some integer overflow checks (fixes issue #79)

- tif_getimage.c: Fix buffer underflow crash for less raster rows at TIFFReadRGBAImageOriented() (fixes issue #704)

- TIFFReadRGBAImage(): several fixes to avoid buffer overflows.

- Correct passing arguments to TIFFCvtIEEEFloatToNative() and TIFFCvtIEEEDoubleToNative() if HAVE_IEEEFP is not defined. (fixes issue #699)

- LZWDecode(): avoid nullptr dereference when trying to read again after EOI marker has been found with remaining output bytes (fixes issue #698)

- TIFFSetSubDirectory(): check _TIFFCheckDirNumberAndOffset() return.

- TIFFUnlinkDirectory() and TIFFWriteDirectorySec(): clear tif_rawcp when clearing tif_rawdata (fixes issue #711)

- JPEGEncodeRaw(): error out if a previous scanline failed to be written, to avoid out-of-bounds access (fixes issue #714)

- tif_jpeg: Fix bug in JPEGDecodeRaw() if JPEG_LIB_MK1_OR_12BIT is defined for 8/12bit dual mode, introduced in libjpeg-turbo 2.2, which was actually released as 3.0. (fixes issue #717)

- add assert for TIFFReadCustomDirectory infoarray check.

Other changes:

- tif_jpeg.c: use JPEG_MAX_DIMENSION constant instead of hard-coded 65535 value

- tif_lzw.c / tif_packbits.c: use NULL instead of 0.

- Take into account PACKBITS_READ_ONLY, LZW_READ_ONLY, and LERC_READ_ONLY macros to disable compiling write-support for those codecs.

- tif_lerc.c: add missing casts

- Merge several functions implemented twice in different modules. (see issue #154)

- Remove get_field_type form TIFFField structure because it is not used anymore and rename other parameter to set_get_field_type

- Silence some Coverity Scan warnigs and mark already dismissed ones.

- References to codec libraries updated and missing codec compile defines (tiffconf.h) added.

- Move mkg3states under libtiff/tools. (fixes issue #708)

- tiff_itrunc(): don't use rand() to please Coverity Scan.

- tiffio.h: fix compilation with LOGLUV_PUBLIC=0

- LICENSE.md: Add BSD license for Lempel-Ziv & Welch compression (tif_lzw.c) (fixes issue #431)

## Documentation

- TIFFRGBAImage.rst note added for incorrect saving of images with TIFF orientation from 5 (LeftTop) to 8 (LeftBottom) in the raster.

- TIFFRGBAImage.rst note added about un-associated alpha handling (fixes issue #67)

- Update "Defining New TIFF Tags" description. (fixes issue #642)

- Fix return type of TIFFReadEncodedTile()

- Update the documentation to reflect deprecated typedefs.

- TIFFWriteDirectory.rst: Clarify TIFFSetWriteOffset() only sets offset for image data and not for IFD data.

- Update documentation on re-entrancy and thread safety.

- Remove dead links to no more existing Awaresystems web-site.

- Updating BigTIFF specification and some miscelaneous editions.

- Replace some last links and remove last todos.

- Added hints for correct allocation of TIFFYCbCrtoRGB structure and its associated buffers. (fixes issue #681)

- Added chapter to "Using the TIFF Library" with links to handling multi-page TIFF and custom directories. (fixes issue #43)

- update TIFFOpen.rst with the return values of mapproc and unmapproc. (fixes issue #12)

## Tools changes

New/improved functionality:

- tiffinfo: add a -W switch to warn about unknown tags.

- tiffdither: process all pages in input TIFF file.

Bug fixes:

- ppm2tiff: Fix bug in pack_words trailing bytes, where last two bytes of each line were written wrongly. (fixes issue #467)

- fax2ps: fix regression of commit 28c38d648b64a66c3218778c4745225fe3e3a06d where TIFFTAG_FAXFILLFUNC is being used rather than an output buffer (fixes issue #649)

- tiff2pdf: Check TIFFTAG_TILELENGTH and TIFFTAGTILEWIDTH (fixes issue #650)

- tiff2pdf: check h_samp and v_samp for range 1 to 4 to avoid division by zero. (fixes issue #654)

- tiff2pdf: avoid null pointer dereference. (fixes issue #741)

- Improve non-secure integer overflow check (comparison of division result with multiplicant) at compiler optimisation in tiffcp, rgb2ycbcr and tiff2rgba. (fixes issue #546)

- tiff2rgba: fix some "a partial expression can generate an overflow before it is assigned to a broader type" warnings. (fixes issue #682)

- tiffdither/tiffmedian: Don't skip the first line of the input image. (fixes issue #703)

- tiffdither: avoid out-of-bounds read identified in issue #733

- tiffmedian: error out if TIFFReadScanline() fails (fixes issue #707)

- tiffmedian: close input file. (fixes issue #735)

- thumbail: avoid potential out of bounds access (fixes issue #715)

- tiffcrop: close open TIFF files and release allocated buffers before exiting in case of error to avoid memory leaks. (fixes issue #716)

- tiffcrop: fix double-free and memory leak exposed by issue #721

- tiffcrop: avoid buffer overflow. (fixes issue #740)

- tiffcrop: avoid nullptr dereference. (fixes issue #734)

- tiffdump: Fix coverity scan issue CID 1373365: Passing tainted expression *datamem to PrintData, which uses it as a divisor or modulus.

- tiff2ps: check return of TIFFGetFiled() for TIFFTAG_STRIPBYTECOUNTS and TIFFTAG_TILEBYTECOUNTS to avoid NULL pointer dereference. (fixes issue #718)

- tiffcmp: fix memory leak when second file cannot be opened. (fixes issue #718 and issue #729)

- tiffcp: fix setting compression level for lossless codecs. (fixes issue #730)

- raw2tiff: close input file before exit (fixes issue #742)

## Changes to contributed and unsupported tools

- addtiffo: Fixing MSVC compiler warnings

- Improved oss-fuzz fuzzer tiff_read_rgba_fuzzer.cc.

- oss-fuzz: fix memory leak in fuzz target.