# Changes in TIFF v4.4.0

References
Current Version | v4.4.0 (tag v4.4.0)
Previous Version | v4.3.0
Master Download Site | https://download.osgeo.org/libtiff/
Master HTTP Site #1 | http://www.simplesystems.org/libtiff/
Master HTTP Site #2 | https://libtiff.gitlab.io/libtiff/
Master HTTP Site #3 | http://libtiff.maptools.org/

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

- Handle absolute paths in pkg-config file (issue #333)

- Correct fix for the pkgconf file relative paths.

- cmake: allow running the tests with a read-only source directory.

- cmake: Fix `STRIPCHOP_DEFAULT` value in CMake builds.

- build: Fix static library imports in mingw related to LERC

- Fix version in `libtiff-4.pc.in`, and CMake build: Add requirements to pc file

- cmake: Fix build with CMake 3.10.

- cmake: Export tiff targets.

- Make `LERC_SUPPORT` conditional on `ZLIB_SUPPORT`

## Library changes

New/improved functionalities:

- `TIFFIsBigTiff()` function added.

- Functions `TIFFFieldSetGetSize()` and `TIFFieldSetGetCountSize()` added.

- `LZWDecode()`: major speed improvements (~30% faster)

- Predictor 2 (horizontal differenciation): support 64-bit

- Support libjpeg 9d

Bug fixes:

- Remove incorrect assert (issue #329)

- avoid hang in `TIFFRewriteDirectory()` if a classic file > 4 GB is attempted to be created

- `tif_jbig.c`: fix crash when reading a file with multiple IFD in memory-mapped mode and when bit reversal is needed (fixes issue #385)

- `TIFFFetchNormalTag()`: avoid calling `memcpy()` with a null source pointer and size of zero (fixes issue #383)

- `TIFFWriteDirectoryTagData()`: turn assertion on data length into a runtime check

- `TIFFFetchStripThing()`: avoid calling `memcpy()` with a null source pointer and size of zero (fixes issue #362)

- `TIFFReadDirectory()`: avoid calling `memcpy()` with a null source pointer and size of zero (fixes issue #362)

- `TIFFYCbCrToRGBInit()`: avoid Integer-overflow

- `TIFFGetField(TIFFTAG_STRIPBYTECOUNTS/TIFFTAG_STRIPOFFSETS)`: return error if returned pointer is NULL (fixes issue #342)

- OJPEG: avoid assertion when using `TIFFReadScanline()` (fixes issue #337)

- `TIFFReadDirectory()`: fix OJPEG hack (fixes issue #319)

- LZW codec: fix support for strips/tiles > 2 GB on Windows

- `TIFFAppendToStrip()`: fix rewrite-in-place logic (fixes issue #309)

- Fix `TIFFRewriteDirectory()` discarding directories.

- `TIFFReadCustomDirectory()`: avoid crash when reading SubjectDistance tag on a non EXIF directory (issue #316)

- Fix Segmentation fault printing GPS directory if `Altitude` tag is present

- `tif_jpeg.c`: do not emit progressive scans with mozjpeg. (issue #266)

- `_TIFFRewriteField()`: fix when writing a IFD with a single tile that is a sparse one, on big endian hosts

- Fix all remaining uses of legacy Deflate compression id and warn on use.

## Tools changes

Bug fixes:

- tiffcrop: Fix issue issue #330 and some more from 320 to 349.

- tiffcrop: fix issue issue #395: generation of strange section images.

- tiffcrop: fix issue issue #380 and issue #382 heap buffer overflow in extractImageSection

- tiffcrop: fix FPE (issue #393)

- tiffcrop: buffsize check formula in `loadImage()` amended (fixes issue #273, issue #275)

- tiffcrop.c: Fix issue issue #352 heap-buffer-overflow by correcting `uint32_t` underflow.

- tiff2pdf: handle 8-bit palette colormap.

- tiffcp: avoid buffer overflow in "mode" string (fixes issue #400)

- tiffcp: Fix incomprehensible setting of orientation tag (fixes issue #29)

- tiffcp: do not try to fetch compressor-specific tags when not appropriate (fixes issue #396)

- tiffcp: fix heap buffer overflow (issue #278)

- tiff2ps: In `limitMalloc()` check for negative size (fixes issue #284)

- tiffinfo: add a `-M` switch to define the maximum heap allocation, and default it to 256 MiB (fixes issue #287, issue #290)

- tiffinfo: limit more memory allocations using `-M` switch (fixes issue #288)

- tiffset: fix global-buffer-overflow for ASCII tags where count is required (fixes issue #355)

- raw2tiff: check that band number if not zero to avoid floating point exception(fixes issue #338)

- tiffinfo/tiffdump: improve output for GDAL tags.

## Contributed software changes

None