# Changes in TIFF v3.9.0beta

References
Current Version | v3.9.0beta (tag Release-v3-9-0beta)
Previous Version | v3.8.2
Master Download Site | https://download.osgeo.org/libtiff/
Master HTTP Site | http://www.simplesystems.org/libtiff/

This document describes the changes made to the software between the previous and current versions (see above). If you don't find something listed here, then it was not done in this timeframe, or it was not considered important enough to be mentioned. The following information is located here:

## Major changes

- New tiffcrop utility contributed by Richard Nolde. tiffcrop does the same as tiffcp, but also can crop, extract, rotate and mirror images.

- `tif_jbig.c`: Added support for JBIG compression scheme (34661 code), contributed by Lee Howard.

- Totally new implementation of OJPEG module from Joris Van Damme. No need to patch libjpeg anymore. Many OJPEG files should be supported now that was not supported previously.

## Software configuration changes

- `tif_config.wince.h`, `tiffconf.wince.h`, `tif_wince.c`: WinCE-specific compatibility stuff from Mateusz Loskot.

- Rename `config.h.vc` and `tif_config.h.vc` to `config.vc.h` and `tif_config.vc.h` for easier identification by folks using an IDE.

- `configure`, `configure.ac`: OJPEG support enabled by default (i.e., when conformant JPEG support is enabled).

- `README.vms`, `Makefile.am`, `configure.com`, `libtiff/Makefile.am`, `libtiff/tif_config.h-vms`, `libtiff/tif_stream.cxx`, `libtiff/tif_vms.c`, `libtiff/tiffconf.h-vms`: Added support for OpenVMS by Alexey Chupahin.

- `nmake.opt`: use `/EHsc` for VS2005 compatibility. Also define `_CRT_SECURE_NO_DEPRECATE` to avoid noise on VS2005.

## Library changes

- `tif_dirinfo.c` (`_TIFFFindFieldInfo()`): Don't attempt to `bsearch()` on a `NULL` fieldinfo list. (`_TIFFFindFieldInfoByName()`): Don't attempt to `lfind()` on a `NULL` fieldinfo list.

- `tif_jpeg.c`: Changed `JPEGInitializeLibJPEG()` so that it will convert from decompressor to compressor or compress to decompress if required by the force arguments. This works around a problem in where the `JPEGFixupTestSubsampling()` may cause a decompressor to be setup on a directory when later a compressor is required with the force flag set. Occurs with the addtiffo program for instance.

- `tif_dirwrite.c`: Fixed swapping of byte arrays stored in-place in tag offsets as per bug Remote Sensing bugzilla #1363 [no longer available]

- `tif_getimage.c`: workaround for "Fractional scanline" error reading OJPEG images with rowsperstrip that is not a multiple of vertical subsampling factor. This bug is mentioned in Remote Sensing bugzilla #1390 [no longer available] and http://www.asmail.be/msg0054766825.html

- `tif_dirread.c`: Added special function to handle `SubjectDistance` EXIF tag as per bug Remote Sensing bugzilla #1362 [no longer available]

- `tif_dirread.c`, `tif_read.c`: Type of the byte counters changed from `tsize_t` to `uint32` to be able to work with data arrays larger than 2GB. Fixes bug Remote Sensing bugzilla #890 [no longer available]. Idea submitted by Matt Hancher.

- `tif_dir.c`: Workaround for incorrect TIFFs with `ExtraSamples == 999` produced by Corel Draw. As per bug Remote Sensing bugzilla #1490 [no longer available]

- `tif_write.c`: `TIFFAppendToStrip()` - clear sorted flag if we move a strip. Remote Sensing bugzilla #1359 [no longer available]

- `tif_fax3.c`: Save the state of printdir codec dependent method.

- `tif_jpeg.c`: Save the state of printdir codec dependent method as per bug Remote Sensing bugzilla #1273 [no longer available]

- `tif_win32.c`: Fixed problem with offset value manipulation as per bug Remote Sensing bugzilla #1322 [no longer available]

- `tif_fax3.c`, `tif_next.c`, `tif_pixarlog.c`: Fixed multiple vulnerabilities, as per Gentoo bug (): http://bugs.gentoo.org/show_bug.cgi?id=142383

- `tif_lzw.c`, `tif_zip.c`: Fixed problems with mixing encoding and decoding on the same read-write TIFF handle. The LZW code can now maintain encode and decode state at the same time. The ZIP code will switch back and forth as needed. Remote Sensing bugzilla #757 [no longer available]

- `tif_msdos.c`: Avoid handle leak for failed opens. c/o Thierry Pierron

- `tif_dirwrite.c`: take care not to flush out buffer of strip/tile data in `_TIFFWriteDirectory()` if `TIFF_BEENWRITING` not set. Relates to bug report by Peng Gao with black strip at bottom of images.

- `tif_dirwrite.c`: make sure to use `uint32` for wordcount in `TIFFWriteNormalTag()` if `writecount` is `VARIABLE2` for ASCII fields. It already seems to have been done for other field types. Needed for tiffset on files with geotiff ascii text.

- `tif_dirinfo.c`: Added missed EXIF tag `ColorSpace` (40961).

- `tif_dirread.c`: Move IFD fetching code in the separate function `TIFFFetchDirectory()` avoiding code duplication in `TIFFReadDirectory()` and `TIFFReadCustomDirectory()`.

- `tif_readdir.c`: Added case in `EstimateStripByteCounts()` for tiled files. Modified `TIFFReadDirectory()` to not invoke `EstimateStripByteCounts()` for case where entry 0 and 1 are unequal but one of them is zero. Remote Sensing bugzilla #1204 [no longer available]

- `tif_open.c`, `tif_dirread.c`, `tiffiop.h`: Move IFD looping checking code in the separate function `TIFFCheckDirOffset()`.

- `tif_aux.c`: Added `_TIFFCheckRealloc()` function.

- `tif_fax3.c`: Fixed problems in fax decoder as per bug Remote Sensing bugzilla #1194 [no longer available]

- `tif_jbig.c`: Added support for JBIG compression scheme (34661 code) contributed by Lee Howard. As per bug Remote Sensing bugzilla #896 [no longer available].

- `tif_getimage.c`: Added support for planarconfig separate non-subsampled YCbCr (i.e. separate YCbCr with subsampling `[1,1]`).

- `tif_getimage.c`: Revision of all RGB(A) put routines:

  - Conversion of unassociated alpha to associated alpha now done with more performant LUT, and calculation more correct.

  - Conversion of 16bit data to 8bit data now done with more performant LUT, and calculation more correct

  - Bugfix of handling of 16bit RGB with unassociated alpha

- `tif_ojpeg.c`: totally new implementation

- `tif_getimage.c`: removed `TIFFTAG_JPEGCOLORMODE` handling of OJPEG images in favor of tif_getimage.c native handling of YCbCr and desubsampling.

- `tif_jpeg.c`: `JPEGVSetField()` so that altering the photometric interpretation causes the "upsampled" flag to be recomputed. Fixes peculiar bug where photometric flag had to be set before jpegcolormode flag.

## Tools changes

- `tiff2ps.c`: Added support 16-bit images as per bug Remote Sensing bugzilla #1566 [no longer available]. Patch from William Bader.

- `tiff2pdf.c`: Fix for `TIFFTAG_JPEGTABLES` tag fetching and significant upgrade of the whole utility as per bug Remote Sensing bugzilla #1560 [no longer available]. Now we don't need `tiffiop.h` in tiff2pdf anymore and will open output PDF file using `TIFFClientOpen()` machinery as it is implemented by Leon Bottou.

- `tiffcrop.c`: New tiffcrop utility contributed by Richard Nolde. As per bug Remote Sensing bugzilla #1383 [no longer available]

- `tiff2pdf.c`: Do not assume inches when the resolution units do not specified. As per bug Remote Sensing bugzilla #1366 [no longer available]

- `tiffset.c`: Properly handle tags with `TIFF_VARIABLE` writecount. As per bug Remote Sensing bugzilla #1350 [no longer available]

- `tif2rgba.c`: This utility does not work properly on big-endian architectures. It was fixed including the bug Remote Sensing bugzilla #1149 [no longer available]

- `tiff2pdf.c`: Fix handling of `-q` values. Remote Sensing bugzilla #587 [no longer available]

- `tiffcmp.c`: Fixed floating point comparison logic as per bug Remote Sensing bugzilla #1191 [no longer available]

- `tiff2pdf.c`: Fixed buffer overflow condition in `t2p_write_pdf_string()` as per bug Remote Sensing bugzilla #1196 [no longer available]

## Contributed software changes

- `contrib/addtiffo/tif_overview.c`: Fix problems with odd sized output blocks in `TIFF_DownSample_Subsampled()` (Remote Sensing bugzilla #1542 [no longer available]).

- `contrib/dbs/xtiff/xtiff.c`: Make xtiff utility compilable. Though it is still far from the state of being working and useful.