From 304327d825c7ba6a9f560d0ca792304f0b03e3b3 Mon Sep 17 00:00:00 2001 From: mancha Date: Sun, 11 Aug 2013 Subject: Multiple CVEs addressed and bugs fixed. Mega-patch against libtiff-3.9.7 constructed from upstream commits that syncs it to the last CVS revision (5/2/2013). It fixes: a. CVE-2012-4447 b. CVE-2012-4564 c. CVE-2013-1960 d. CVE-2013-1961 e. auto-rotate option bug f. TIFFPrintDirectory bug --- ChangeLog | 781 ++++++++++++++++++++++-------------------- Makefile.in | 2 aclocal.m4 | 6 build/Makefile.in | 2 contrib/Makefile.in | 2 contrib/acorn/Makefile.in | 2 contrib/addtiffo/Makefile.in | 2 contrib/dbs/Makefile.in | 2 contrib/dbs/xtiff/Makefile.in | 2 contrib/dbs/xtiff/xtiff.c | 6 contrib/iptcutil/Makefile.in | 2 contrib/mac-cw/Makefile.in | 2 contrib/mac-mpw/Makefile.in | 2 contrib/mfs/Makefile.in | 2 contrib/pds/Makefile.in | 2 contrib/ras/Makefile.in | 2 contrib/stream/Makefile.in | 2 contrib/tags/Makefile.in | 2 contrib/win_dib/Makefile.in | 2 html/Makefile.in | 2 html/images/Makefile.in | 2 html/man/Makefile.in | 2 libtiff/Makefile.in | 2 libtiff/tif_codec.c | 5 libtiff/tif_dirinfo.c | 4 libtiff/tif_pixarlog.c | 94 ++--- libtiff/tif_print.c | 15 man/Makefile.in | 2 port/Makefile.in | 2 test/Makefile.in | 2 tools/Makefile.in | 2 tools/ppm2tiff.c | 39 +- tools/rgb2ycbcr.c | 5 tools/tiff2bw.c | 4 tools/tiff2pdf.c | 313 ++++++++-------- tools/tiff2ps.c | 20 - tools/tiffcrop.c | 12 tools/tiffdither.c | 4 38 files changed, 728 insertions(+), 628 deletions(-) diff --git a/ChangeLog b/ChangeLog index c18d495..2d8bc7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,51 @@ +2013-05-02 Tom Lane + + * tools/tiff2pdf.c: Rewrite JPEG marker parsing in + t2p_process_jpeg_strip to be at least marginally competent. The + approach is still fundamentally flawed, but at least now it won't + stomp all over memory when given bogus input. Fixes CVE-2013-1960. + +2013-05-02 Tom Lane + + * contrib/dbs/xtiff/xtiff.c, libtiff/tif_codec.c, + libtiff/tif_dirinfo.c, tools/rgb2ycbcr.c, tools/tiff2bw.c, + tools/tiff2pdf.c, tools/tiff2ps.c, tools/tiffcrop.c, + tools/tiffdither.c: Enlarge some fixed-size buffers that weren't + large enough, and eliminate substantially all uses of sprintf(buf, + ...) in favor of using snprintf(buf, sizeof(buf), ...), so as to + protect against overflow of fixed-size buffers. This responds in + particular to CVE-2013-1961 concerning overflow in tiff2pdf.c's + t2p_write_pdf_page(), but in general it seems like a good idea to + deprecate use of sprintf(). + +2013-01-25 Bob Friesenhahn + + * tools/tiff2ps.c:Fix bug in auto rotate option code. Once a + rotation angle was set by the auto rotate check, it was retained + for all pages that followed instead of being retested for each + page. Patch by Richard Nolde. + +2012-12-12 Tom Lane + + * libtiff/tif_print.c: Back-patch recent fixes in + TIFFPrintDirectory to make it handle field_passcount fields sanely + for both TIFF_VARIABLE and TIFF_VARIABLE2 cases. + +2012-12-10 Tom Lane + + * tools/ppm2tiff.c: Back-patch fix for CVE-2012-4564. + +2012-12-10 Tom Lane + + * libtiff/tif_pixarlog.c: Back-patch recent security fixes for + tif_pixarlog.c, namely the fix for CVE-2012-4447 and protections + against accessing outside the lookup arrays for out of range + inputs. + +2012-11-18 Bob Friesenhahn + + * automake: Update Automake to 1.12.5 release. + 2012-09-22 Bob Friesenhahn * libtiff 3.9.7 released. @@ -31,7 +79,7 @@ * libtiff/tif_dirread.c: Avoid trusting samplesperpixel's default of 1 for purposes of trimming tags. This is to get some super - crappy OJPEG files to work again. Grr. + crappy OJPEG files to work again. Grr. http://bugzilla.maptools.org/show_bug.cgi?id=2348 2012-06-01 Frank Warmerdam @@ -101,8 +149,8 @@ * libtiff/tiffiop.h: avoid declaring int64/uint64 on AIX with XLC where they are already available. (#2301) - * libtiff/tif_thunder.c: Correct potential buffer overflow with - thunder encoded files with wrong bitspersample set. The libtiff + * libtiff/tif_thunder.c: Correct potential buffer overflow with + thunder encoded files with wrong bitspersample set. The libtiff development team would like to thank Marin Barbella and TippingPoint's Zero Day Initiative for reporting this vulnerability (ZDI-CAN-1004, CVE-2011-1167). @@ -110,18 +158,18 @@ 2011-03-10 Frank Warmerdam - * libtiff/tif_fax3.h: Fix to last change allowing zero length + * libtiff/tif_fax3.h: Fix to last change allowing zero length runs at the start of a scanline - needed for legal cases. 2011-03-02 Frank Warmerdam - * libtiff/tif_fax3.h: Protect against a fax VL(n) codeword commanding - a move left. Without this, a malicious input file can generate an - indefinitely large series of runs without a0 ever reaching the right + * libtiff/tif_fax3.h: Protect against a fax VL(n) codeword commanding + a move left. Without this, a malicious input file can generate an + indefinitely large series of runs without a0 ever reaching the right margin, thus overrunning our buffer of run lengths. Per CVE-2011-0192. - This is a modified version of a patch proposed by Drew Yao of Apple - Product Security. It adds an unexpected() report, and disallows the - equality case, since emitting a run without increasing a0 still allows + This is a modified version of a patch proposed by Drew Yao of Apple + Product Security. It adds an unexpected() report, and disallows the + equality case, since emitting a run without increasing a0 still allows buffer overrun. 2011-02-25 Andrey Kiselev @@ -133,7 +181,7 @@ 2011-01-03 Lee Howard * libtiff/tif_jpeg.c: Fix regressions with 2 and 3 band images - caused by commit on 2010-12-14. Submitted by e-mail from + caused by commit on 2010-12-14. Submitted by e-mail from Even Rouault 2010-12-31 Olivier Paquet @@ -188,13 +236,13 @@ 2010-12-12 Lee Howard - * tools/tiff2pdf.c: fix colors for images with RGBA + * tools/tiff2pdf.c: fix colors for images with RGBA interleaved data http://bugzilla.maptools.org/show_bug.cgi?id=2250 2010-12-11 Lee Howard - * tools/tiff2pdf.c: remove invalid duplication for Lab + * tools/tiff2pdf.c: remove invalid duplication for Lab http://bugzilla.maptools.org/show_bug.cgi?id=2162 2010-12-11 Lee Howard @@ -236,7 +284,7 @@ 2010-12-07 Lee Howard - * libtiff/tif_jpeg.c, libtiff/tif_strip.c: apply patch for + * libtiff/tif_jpeg.c, libtiff/tif_strip.c: apply patch for CVE-2010-3087 per bug http://bugzilla.maptools.org/show_bug.cgi?id=2140 @@ -248,7 +296,7 @@ 2010-09-25 Lee Howard * tools/tiff2ps.c: improvements and enhancements from Richard Nolde - with additional command line options for Document Title, + with additional command line options for Document Title, Document Creator, and Page Orientation 2010-07-13 Bob Friesenhahn @@ -349,14 +397,14 @@ * libtiff/tif_dirread.c: Fixed bad handling of out of order tags definated late by a codec (#2210) - * libtiff/tif_dirread.c: Fixed inadequate validation of the + * libtiff/tif_dirread.c: Fixed inadequate validation of the SubjectDistance field (#2212). - * tiff2pdf.c: Fix assorted bugs in tiff2pdf: missing "return" - in t2p_read_tiff_size() causes t2p->tiff_datasize to be set entirely - wrong for COMPRESSION_JPEG case, resulting in memory stomp if actual - size is larger. Also, there are a bunch of places that try to - memset() a malloc'd buffer before checking for malloc failure, which + * tiff2pdf.c: Fix assorted bugs in tiff2pdf: missing "return" + in t2p_read_tiff_size() causes t2p->tiff_datasize to be set entirely + wrong for COMPRESSION_JPEG case, resulting in memory stomp if actual + size is larger. Also, there are a bunch of places that try to + memset() a malloc'd buffer before checking for malloc failure, which would result in core dump if there actually were a failure. (#2211) 2010-06-11 Bob Friesenhahn @@ -452,13 +500,13 @@ 2010-05-07 Frank Warmerdam - * libtiff/tif_jpeg.c: Ensure that quality is always set in - JPEGPreEncode(), not just when we want to output local tables. + * libtiff/tif_jpeg.c: Ensure that quality is always set in + JPEGPreEncode(), not just when we want to output local tables. Otherwise the quality used during compression may not be right and might not match the tables in the tables tag. This bug only occurs when seeking between directories in the midst of writing blocks. http://trac.osgeo.org/gdal/ticket/3539 - + 2010-05-05 Olivier Paquet * libtiff/tif_print.c: Have TIFFTAG_REFERENCEBLACKWHITE always print 6 @@ -476,11 +524,11 @@ 2010-02-22 Lee Howard * libtiff/tif_jpeg.c: Do not generate a JPEGTables tag when creating - the JPEG TIFF as is is not required in order to prevent it from - being unused and filled with invalid data. (Leave it to be + the JPEG TIFF as is is not required in order to prevent it from + being unused and filled with invalid data. (Leave it to be generated by later activity.) http://bugzilla.maptools.org/show_bug.cgi?id=2135 - * tools/tiff2pdf.c: Write the JPEG SOI headers into the TIFF strip + * tools/tiff2pdf.c: Write the JPEG SOI headers into the TIFF strip data rather than skipping them. This fixes the ability to view in Acrobat Reader, Evince, and Ghostscript. http://bugzilla.maptools.org/show_bug.cgi?id=2135 @@ -491,13 +539,13 @@ 2010-01-06 Frank Warmerdam * libtiff/tif_dir.c: Ensure tile and scanline sizes are reset - when moving to new directories. + when moving to new directories. http://bugzilla.maptools.org/show_bug.cgi?id=1936 2009-12-03 Frank Warmerdam * libtiff/tif_jpeg.c: Fix a couple of issues that trigger failures in - some cases when using TIFFReadScanline() with JPEG compressed + some cases when using TIFFReadScanline() with JPEG compressed subsampled ycbcr images. http://bugzilla.maptools.org/show_bug.cgi?id=1936 @@ -610,7 +658,7 @@ 2009-06-22 Frank Warmerdam - * libtiff/tif_lzw.c: Fix buffer underflow bug. + * libtiff/tif_lzw.c: Fix buffer underflow bug. http://bugzilla.maptools.org/show_bug.cgi?id=2065 2009-06-03 Frank Warmerdam @@ -621,7 +669,7 @@ 2009-02-12 Frank Warmerdam - * libtiff/tif_luv.c: Fix handling of tiled logluv images. + * libtiff/tif_luv.c: Fix handling of tiled logluv images. http://bugzilla.maptools.org/show_bug.cgi?id=2005 2009-01-23 Frank Warmerdam @@ -635,7 +683,7 @@ 2009-01-12 Bob Friesenhahn - * tools/tiff2ps.c: Remove spurious message printed to stderr. + * tools/tiff2ps.c: Remove spurious message printed to stderr. 2009-01-11 Bob Friesenhahn @@ -668,7 +716,7 @@ 2008-12-31 Frank Warmerdam * tools/tiffcrop.c, man/tiffcrop.1: A major update from Richard - Nolde. + Nolde. 2008-12-21 Frank Warmerdam @@ -678,7 +726,7 @@ 2008-12-21 Frank Warmerdam - * libtiff/tif_getimage.c, tiffio.h: More ABI corrections. + * libtiff/tif_getimage.c, tiffio.h: More ABI corrections. Removed SubsamplingHor/Ver from TIFFRGBAImage structure. http://bugzilla.maptools.org/show_bug.cgi?id=1980 @@ -719,15 +767,15 @@ 2008-05-24 Frank Warmerdam - * tif_codec.c: Avoid NULL pointer dereferencing for exotic + * tif_codec.c: Avoid NULL pointer dereferencing for exotic compression codec codes. * tif_dirread.c: zero tif->tif_dir after freeing the directory in TIFFReadCustomDirectory(). I don't exactly remember why this - was important. + was important. * tif_dirwrite.c: Fix potential memory leak writing large double - tags. + tags. * tif_dirread.c: Fix unchecked malloc result. @@ -747,12 +795,12 @@ 2007-11-22 Frank Warmerdam - * tif_write.c: Rip out the fancy logic in TIFFAppendToStrip() for - establishing if an existing tile can be rewritten to the same location - by comparing the current size to all the other blocks in the same - directory. This is dangerous in many situations and can easily + * tif_write.c: Rip out the fancy logic in TIFFAppendToStrip() for + establishing if an existing tile can be rewritten to the same location + by comparing the current size to all the other blocks in the same + directory. This is dangerous in many situations and can easily corrupt a file. (observed in esoteric GDAL situation that's hard to - document). This change involves leaving the stripbytecount[] values + document). This change involves leaving the stripbytecount[] values unaltered till TIFFAppendToStrip(). Now we only write a block back to the same location it used to be at if the new data is the same size or smaller - otherwise we move it to the end of file. @@ -760,17 +808,17 @@ * tif_dirwrite.c: Try to avoid writing out a full readbuffer of tile data when writing the directory just because we have BEENWRITING at some point in the past. This was causing odd junk to be written out - in a tile of data when a single tile had an interleaving of reading - and writing with reading last. (highlighted by gdal - autotest/gcore/tif_write.py test 7. + in a tile of data when a single tile had an interleaving of reading + and writing with reading last. (highlighted by gdal + autotest/gcore/tif_write.py test 7. * tif_predict.c: use working buffer in PredictorEncodeTile to avoid - modifying callers buffer. + modifying callers buffer. http://trac.osgeo.org/gdal/ticket/1965 - * tif_predict.c/h, tif_lzw.c, tif_zip.c: Improvements so that + * tif_predict.c/h, tif_lzw.c, tif_zip.c: Improvements so that predictor based encoding and decoding works in read-write update - mode properly. + mode properly. http://trac.osgeo.org/gdal/ticket/1948 2007-10-05 Frank Warmerdam @@ -785,7 +833,7 @@ 2007-07-18 Andrey Kiselev - * libtiff/{Makefile.am, Makefile.v}: Do not distribute tiffconf.h, + * libtiff/{Makefile.am, Makefile.v}: Do not distribute tiffconf.h, remove tif_config.h/tiffconf.h during cleaning. As per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=1573 @@ -803,14 +851,13 @@ 2007-07-03 Andrey Kiselev * tools/tiff2ps.c: Added support 16-bit images as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1566 Patch from William Bader. * tools/tiff2pdf.c: Fix for TIFFTAG_JPEGTABLES tag fetching and significant upgrade of the whole utility as per bug - http://bugzilla.remotesensing.org/show_bug.cgi?id=1560 Now we don't need tiffiop.h in tiff2pdf anymore and will open output @@ -828,7 +875,7 @@ * libtiff/tif_dirwrite.c: Fixed problem introduced with a fix for a byte swapping issue - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1363 As per bug @@ -846,7 +893,7 @@ * libtiff/{tif_dir.h, tif_dirread.c, tif_dirinfo.c, tif_jpeg.c, tif_fax3.c, tif_jbig.c, tif_luv.c, tif_ojpeg.c, tif_pixarlog.c, tif_predict.c, tif_zip.c}: Finally fix bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1274 by introducing _TIFFMergeFieldInfo() returning integer error status @@ -857,7 +904,7 @@ 2007-04-07 Frank Warmerdam - * contrib/addtiffo/tif_overview.c: Fix problems with odd sized output + * contrib/addtiffo/tif_overview.c: Fix problems with odd sized output blocks in TIFF_DownSample_Subsampled() (bug 1542). 2007-04-06 Frank Warmerdam @@ -865,20 +912,20 @@ * libtiff/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 + 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. + force flag set. Occurs with the addtiffo program for instance. 2007-04-06 Andrey Kiselev * libtiff/tif_dirwrite.c: Fixed swapping of byte arrays stored in-place in tag offsets as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1363 * tools/tiffcrop.c, man/tiffcrop.1: Significant update in functionality from Richard Nolde. As per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1525 2007-03-28 Frank Warmerdam @@ -886,15 +933,15 @@ * libtiff/tif_fax3.c: "inline static" -> "static inline" for IRIC CC. 2007-03-07 Joris Van Damme - + * libtiff/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: http://bugzilla.remotesensing.org/show_bug.cgi?id=1390 - http://www.asmail.be/msg0054766825.html + http://www.asmail.be/msg0054766825.html 2007-03-07 Joris Van Damme - + * libtiff/tif_win32.c: made inclusion of windows.h unconditional * libtiff/tif_win32.c: replaced preprocessor indication for consiously @@ -944,14 +991,14 @@ larger than 2GB. Fixes bug http://bugzilla.remotesensing.org/show_bug.cgi?id=890 - + Idea submitted by Matt Hancher. 2007-01-31 Andrey Kiselev * tools/tif2rgba.c: This utility does not work properly on big-endian architectures. It was fixed including the bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1149 2007-01-15 Mateusz Loskot @@ -968,15 +1015,15 @@ 2006-11-19 Frank Warmerdam - * libtiff/tif_write.c: TIFFAppendToStrip() - clear sorted flag if - we move a strip. - http://bugzilla.remotesensing.org/show_bug.cgi?id=1359 + * libtiff/tif_write.c: TIFFAppendToStrip() - clear sorted flag if + we move a strip. + http://bugzilla.remotesensing.org/show_bug.cgi?id=1359 2006-10-13 Andrey Kiselev * libtiff/tif_dir.c: More fixes for vulnerabilities, reported in Gentoo bug (): - + http://bugs.gentoo.org/show_bug.cgi?id=142383 * libtiff/contrib/dbs/xtiff/xtiff.c: Make xtiff utility compilable. @@ -1010,12 +1057,12 @@ * libtiff/tif_lzw.c, libtiff/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. + ZIP code will switch back and forth as needed. http://bugzilla.remotesensing.org/show_bug.cgi?id=757 2006-09-20 Frank Warmerdam - * libtiff: Rename config.h.vc and tif_config.h.vc to config.vc.h and + * libtiff: 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. 2006-07-25 Frank Warmerdam @@ -1030,7 +1077,7 @@ 2006-07-12 Frank Warmerdam - * tif_dirwrite.c: make sure to use uint32 for wordcount in + * tif_dirwrite.c: make sure to use uint32 for wordcount in TIFFWriteNormanTag 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. @@ -1058,9 +1105,9 @@ 2006-06-17 Frank Warmerdam * tif_readdir.c: Added case in EstimateStripByteCounts() for tiled - files. Modified TIFFReadDirectory() to not invoke + files. Modified TIFFReadDirectory() to not invoke EstimateStripByteCounts() for case where entry 0 and 1 are unequal - but one of them is zero. + but one of them is zero. http://bugzilla.remotesensing.org/show_bug.cgi?id=1204 2006-06-08 Andrey Kiselev @@ -1088,7 +1135,7 @@ * {configure, configure.ac, libtiff/tif_jbig.c, tools/tiffcp.c}: Added support for JBIG compression scheme (34661 code) contributed by Lee Howard. As per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=896 * configure, configure.ac: OJPEG support enabled by default. @@ -1127,7 +1174,7 @@ 2006-04-18 Frank Warmerdam * nmake.opt: use /EHsc for VS2005 compatibility. Also define - _CRT_SECURE_NO_DEPRECATE to avoid noise on VS2005. + _CRT_SECURE_NO_DEPRECATE to avoid noise on VS2005. 2006-04-12 Joris Van Damme @@ -1135,7 +1182,7 @@ non-subsampled YCbCr (i.e. separate YCbCr with subsampling [1,1]) 2006-04-11 Joris Van Damme - + * libtiff/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 @@ -1144,21 +1191,21 @@ - Bugfix of handling of 16bit RGB with unassociated alpha 2006-04-11 Joris Van Damme - - * libtiff/tif_getimage.c: - - When there is no alpha, gtTileSeparate and gtStripSeparate allocated - buffer for alpha strile and filled it, only to never read it back. + + * libtiff/tif_getimage.c: + - When there is no alpha, gtTileSeparate and gtStripSeparate allocated + buffer for alpha strile and filled it, only to never read it back. Removed allocation and fill. - - Minor rename of vars in gtTileSeparate and gtStripSeparate + - Minor rename of vars in gtTileSeparate and gtStripSeparate anticipating planned functionality extension 2006-04-08 Joris Van Damme - * libtiff/tif_getimage.c: renamed pickTileContigCase to PickContigCase - and pickTileSeparateCase to PickSeparateCase as both work on strips as + * libtiff/tif_getimage.c: renamed pickTileContigCase to PickContigCase + and pickTileSeparateCase to PickSeparateCase as both work on strips as well - * libtiff/tif_getimage.c: moved img->get selection from + * libtiff/tif_getimage.c: moved img->get selection from TIFFRGBAImageBegin into PickContigCase and PickSeparateCase to create logical hook for planned functionality extension @@ -1169,9 +1216,9 @@ 2006-04-07 Joris Van Damme - * libtiff/tif_getimage.c: replaced usage of TIFFScanlineSize in + * libtiff/tif_getimage.c: replaced usage of TIFFScanlineSize in gtStripContig with TIFFNewScanlineSize so as to fix buggy behaviour - on subsampled images - this ought to get sorted when we feel brave + on subsampled images - this ought to get sorted when we feel brave enough to replace TIFFScanlineSize alltogether * libtiff/tif_ojpeg.c: fixed bug in OJPEGReadSkip @@ -1180,13 +1227,13 @@ * libtiff/tiffio.h: added new type tstrile_t - * libtiff/tif_dir.h: changed types of td_stripsperimage and td_nstrips - to new tstrile_t, types of td_stripoffset and td_stripbytecount to + * libtiff/tif_dir.h: changed types of td_stripsperimage and td_nstrips + to new tstrile_t, types of td_stripoffset and td_stripbytecount to toff_t* * libtiff/tif_ojpeg.c: totally new implementation - * libtiff/tif_dirread.c: added several hacks to suit new support of + * libtiff/tif_dirread.c: added several hacks to suit new support of OJPEG * libtiff/tif_getimage.c: removed TIFFTAG_JPEGCOLORMODE handling @@ -1226,7 +1273,7 @@ * libtiff/tif_getimage.c: added putcontig8bitYCbCr12tile - * libtiff/tif_read.c: added support for new TIFF_NOREADRAW flag to + * libtiff/tif_read.c: added support for new TIFF_NOREADRAW flag to prepare the path for new tif_ojpeg.c 2006-03-23 Andrey Kiselev @@ -1342,7 +1389,7 @@ * libtiff/tif_write.c: Small code rearrangement in TIFFWriteScanline() to avoid crash as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1081. 2006-02-26 Andrey Kiselev @@ -1392,7 +1439,7 @@ 2006-02-07 Frank Warmerdam * tools/tiff2pdf.c: Fixed support for non-YCbCr encoded JPEG - compressed TIFF files, per submission from Dan Cobra. + compressed TIFF files, per submission from Dan Cobra. 2006-02-07 Andrey Kiselev @@ -1424,7 +1471,7 @@ * libtiff/tif_dirread.c: Use _TIFFGetExifFieldInfo() instead of _TIFFGetFieldInfo() in TIFFReadEXIFDirectory() call as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=1026. 2006-01-23 Andrey Kiselev @@ -1490,7 +1537,7 @@ 2005-12-26 Andrey Kiselev - * libtiff/{tif_dir.c, tif_dir.h, tif_dirread.c, tif_dirinfo.c}: + * libtiff/{tif_dir.c, tif_dir.h, tif_dirread.c, tif_dirinfo.c}: tiffFieldInfo and exifFieldInfo arrays definitions moved back to tif_dirinfo.c; added _TIFFGetFieldInfo() and _TIFFGetExifFieldInfo() private functions to retrieve FieldInfo arrays. @@ -1517,10 +1564,10 @@ 2005-12-23 Joris Van Damme - * libtiff/tiffio.h: fixed typo that potentially resulted in + * libtiff/tiffio.h: fixed typo that potentially resulted in redefininition of USE_WIN32_FILEIO - * libtiff/*: Added more 'dual-mode' error handling: Done TIFFWarning + * libtiff/*: Added more 'dual-mode' error handling: Done TIFFWarning calls in core LibTiff. 2005-12-21 Andrey Kiselev @@ -1530,10 +1577,10 @@ 2005-12-21 Joris Van Damme - * libtiff/*, contrib/*: Added 'dual-mode' error handling, enabling + * libtiff/*, contrib/*: Added 'dual-mode' error handling, enabling newer code to get context indicator in error handler and still - remain compatible with older code: Done TIFFError calls everywhere - except in tools + remain compatible with older code: Done TIFFError calls everywhere + except in tools 2005-12-20 Andrey Kiselev @@ -1606,7 +1653,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=1002 * .cvsignore: many files added, and a few update according - to suggestion of Brad HArds on tiff mailing list. + to suggestion of Brad HArds on tiff mailing list. 2005-11-03 Frank Warmerdam @@ -1631,7 +1678,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=946 * tools/bmp2tiff.c: Fixed possible integer overflow error as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=965 * libtiff/tif_dirinfo.c: Make XResolution, YResolution and @@ -1641,7 +1688,7 @@ * tools/tiffsplit.c: Copy fax related fields over splitted parts as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=983 2005-10-21 Frank Warmerdam @@ -1697,7 +1744,7 @@ * libtiff/tif_dir.c: When prefreeing tv->value in TIFFSetFieldV also set it to NULL to avoid double free when re-setting custom - string fields as per: + string fields as per: http://bugzilla.remotesensing.org/show_bug.cgi?id=922 @@ -1733,7 +1780,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=831 Remove TIFFFetchExtraSamples() function, use TIFFFetchNormalTag() - instead. + instead. * libtiff/tiffconf.h.in: One more attempt to fix the AIX bug @@ -1904,7 +1951,7 @@ 2005-05-22 Frank Warmerdam - * libtiff/tif_dirread.c: Changed the code that computes + * libtiff/tif_dirread.c: Changed the code that computes stripbytecount[0] if it appears bogus to ignore if stripoffset[0] is zero. This is a common case with GDAL indicating a "null" tile/strip. @@ -1914,8 +1961,8 @@ 2005-05-06 Frank Warmerdam - * libtiff/tif_dirread.c: Applied similar change to - TIFFFetchPerSampleLongs and TIFFFetchPerSampleAnys. + * libtiff/tif_dirread.c: Applied similar change to + TIFFFetchPerSampleLongs and TIFFFetchPerSampleAnys. http://bugzilla.remotesensing.org/show_bug.cgi?id=843 @@ -1965,7 +2012,7 @@ * man/TIFFSetField.3tiff: Fixed definition of the TIFFTAG_INKNAMES tag as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=816 2005-03-30 Andrey Kiselev @@ -2075,7 +2122,7 @@ * libtiff/tiffio.h: Move TIFFOpenW() function into the extern "C"{} block as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=763 2005-02-03 Bob Friesenhahn @@ -2096,7 +2143,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=320 * tools/tiff2ps.c: Fixed problem with page sizes as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=742 2005-01-31 Bob Friesenhahn @@ -2137,7 +2184,7 @@ TIFFRGBAImageBegin() as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=739 - + 2005-01-12 Andrey Kiselev * libtiff/tif_jpeg.c: Added ability to read/write the fax specific @@ -2166,7 +2213,7 @@ * libtiff/tiff.h: Restore back the workaround for AIX Visual Age C compiler to avoid double definition of BSD types as per bug - http://bugzilla.remotesensing.org/show_bug.cgi?id=39 + http://bugzilla.remotesensing.org/show_bug.cgi?id=39 * libtiff/Makefile.am: Place the C++ stream API in the separate library called libtiffxx to avoid unneeded dependencies. Probably @@ -2190,7 +2237,7 @@ * libtiff/tif_getimage.c: More fixes for multiple-alpha-channelled RGB-images as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=713 @@ -2226,7 +2273,7 @@ 2004-12-15 Frank Warmerdam * libtiff/tif_getimage.c: #define A1 bracketing for clean build on - SunPro compiler. + SunPro compiler. 2004-12-11 Bob Friesenhahn @@ -2238,7 +2285,7 @@ * libtiff/tif_dirwrite.c: Always write TIFFTAG_SUBIFD using LONG type as per bugs - + http://bugzilla.remotesensing.org/show_bug.cgi?id=703 and @@ -2258,9 +2305,9 @@ * libtiff/tif_config.in.vc: Removed unneded definitions for read/open/close/lseek functions to fix the - + http://bugzilla.remotesensing.org/show_bug.cgi?id=680 - + 2004-12-03 Andrey Kiselev * libtiff/{tif_dir.c, tif_dirread.c}: Remove TIFFReassignTagToIgnore() @@ -2296,7 +2343,7 @@ 2004-11-26 Frank Warmerdam - * libtiff/makefile.vc: make it easier to rename the libtiff DLL. + * libtiff/makefile.vc: make it easier to rename the libtiff DLL. 2004-11-24 Andrey Kiselev @@ -2393,7 +2440,7 @@ per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=648 - + * libtiff/{tif_jpeg.c, tif_ojpeg.c}: TIFFTAG_JPEGTABLES should have uint32 count. Use this type everywhere. @@ -2406,7 +2453,7 @@ * tools/tiff2rgba.c: removed extra newlines in usage message. 2004-10-30 Andrey Kiselev - + * libtiff/tif_dirwrite.c: Improvements in tag writing code. * tools/tiff2ps.c: Fixed wrong variable data type when read Position @@ -2421,7 +2468,7 @@ * libtiff/tif_fax3.c: Fixed case with the wrong decode routines choosing when the incorrect Group4Options tag set. As per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=323 * libtiff/tif_dirwrite.c: Fixed problem with passing count variable of @@ -2440,7 +2487,7 @@ * tools/tiff2pdf.c: added casts to avoid warnings. * libtiff/libtiff.def: Added several more entry points required - to link fax2tiff.c against the DLL on windows. + to link fax2tiff.c against the DLL on windows. 2004-10-27 Andrey Kiselev @@ -2511,7 +2558,7 @@ 2004-10-08 Frank Warmerdam * libtiff/tif_dirinfo.c: Fix bug with tif_foundfield and reallocation - of tif_fieldinfo. + of tif_fieldinfo. http://bugzilla.remotesensing.org/show_bug.cgi?id=630 @@ -2543,7 +2590,7 @@ 2004-09-30 Frank Warmerdam - * libtiff/tif_dirinfo.c: changed type of XMLPacket (tag 700) to + * libtiff/tif_dirinfo.c: changed type of XMLPacket (tag 700) to TIFFTAG_BYTE instead of TIFFTAG_UNDEFINED to comply with the info in the Adobe XMP Specification. @@ -2563,7 +2610,7 @@ 2004-09-26 Andrey Kiselev * libtiff/{tif_dir.h, tif_dir.c, tif_dirread.c, tif_write.c}: - Optimize checking for the strip bounds. + Optimize checking for the strip bounds. * libtiff/{tif_dirread.c, tif_strip.c}: TIFFScanlineSize() and TIFFRasterScanlineSize() functions report zero in the case of integer @@ -2714,7 +2761,7 @@ here http://www.asmail.be/msg0054799560.html - + for details. * tools/fax2tiff.c: Use the new functions in the code. @@ -2842,11 +2889,11 @@ * tools/tiffsplit.c: Fixed problem with unproperly written multibyte files. Now output files will be written using the same byte order flag as in the input image. See - + http://bugzilla.remotesensing.org/show_bug.cgi?id=574 - + for details. - + 2004-05-19 Frank Warmerdam * libtiff/tif_print.c: added (untested) support for printing @@ -2858,7 +2905,7 @@ * libtiff/tif_fax3.c: Avoid reading CCITT compression options if compression type mismatches. See - + http://bugzilla.remotesensing.org/show_bug.cgi?id=565 2004-04-30 Andrey Kiselev @@ -2903,7 +2950,7 @@ 2004-04-04 Frank Warmerdam * libtiff/tif_open.c: close clientdata if TIFFClientOpen() fails - via bad2. + via bad2. 2004-03-26 Andrey Kiselev @@ -2930,10 +2977,10 @@ 2004-02-26 Andrey Kiselev - * tools/tiffsplit.c: Copy JPEGTables tag contents for JPEG compressed + * tools/tiffsplit.c: Copy JPEGTables tag contents for JPEG compressed images. Reported by Artem Mirolubov. - * libtiff/tif_dirread.c: Fixed problem with handling TIFF_UNDEFINED + * libtiff/tif_dirread.c: Fixed problem with handling TIFF_UNDEFINED tag type in TIFFFetchNormalTag() as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=508 @@ -2955,8 +3002,8 @@ 2004-01-30 Frank Warmerdam * libtiff/libtiff.def: Added TIFFCurrentDirOffset, TIFFWriteCheck, - TIFFRGBAImageOK, and TIFFNumberOfDirectories as suggested by - Scott Reynolds. + TIFFRGBAImageOK, and TIFFNumberOfDirectories as suggested by + Scott Reynolds. 2004-01-29 Andrey Kiselev @@ -2974,7 +3021,7 @@ file if TIFFFdOpen() failed as per bug http://bugzilla.remotesensing.org/show_bug.cgi?id=468 - + * libtiff/tif_open.c: More fixes for http://bugzilla.remotesensing.org/show_bug.cgi?id=468 @@ -2998,7 +3045,7 @@ * libtiff/tif_dirwrite.c: Fixed handling of writable ASCII tags that are field_passcount=TRUE properly. Arguably anonymous custom tags should be declared as passcount=FALSE, but I don't want to change - that without a careful review. + that without a careful review. 2004-01-20 Andrey Kiselev @@ -3161,8 +3208,8 @@ 2003-11-17 Frank Warmerdam - * tif_dirread.c: do not mark all anonymously defined tags to be - IGNOREd. + * tif_dirread.c: do not mark all anonymously defined tags to be + IGNOREd. 2003-11-17 Andrey Kiselev @@ -3202,15 +3249,15 @@ 2003-11-09 Frank Warmerdam - * libtiff/tif_tile.c: remove spurious use of "s" (sample) in the + * libtiff/tif_tile.c: remove spurious use of "s" (sample) in the planarconfig_contig case in TIFFComputeTile(). http://bugzilla.remotesensing.org/show_bug.cgi?id=387 2003-11-09 Andrey Kiselev - + * libtiff/tiffiop.h: New macros: TIFFmax, TIFFmin and TIFFrint. - + 2003-11-07 Andrey Kiselev * libtiff/{tiffio.h, tif_strip.c}, man/{TIFFstrip.3t, libtiff.3t}: @@ -3277,11 +3324,11 @@ function TIFFReadRGBAImageOriented() implemented to retrieve raster array with user-specified origin position as suggested by Jason Frank. See - + http://bugzilla.remotesensing.org/show_bug.cgi?id=322 for details. - + * tools/tiff2rgba.c: Switched to use TIFFReadRGBAImageOriented() instead of TIFFReadRGBAImage(). @@ -3362,9 +3409,9 @@ encoded write functions use tif_postdecode() to apply byte order swapping (swab) to the application passed data buffer if the same would be done when reading. This allows us to write pixel data with - more than 8 bits per sample to existing files of a non-native byte + more than 8 bits per sample to existing files of a non-native byte order. One side effect of this change is the applications buffer - itself is altered in this case by the act of writing. + itself is altered in this case by the act of writing. http://bugzilla.remotesensing.org/show_bug.cgi?id=171 @@ -3390,9 +3437,9 @@ 2003-07-08 Frank Warmerdam * tif_aux.c, tif_codec.c, tif_dir.c, tif_dirread.c, tif_extension.c, - tif_fax3.c, tif_getimage.c, tif_luv.c, tif_lzw.c, tif_next.c, + tif_fax3.c, tif_getimage.c, tif_luv.c, tif_lzw.c, tif_next.c, tif_packbits.c, tif_predict.c, tif_print.c, tif_swab.c, tif_thunder.c: - avoid casting warning at /W4. + avoid casting warning at /W4. 2003-07-03 Andrey Kiselev @@ -3414,11 +3461,11 @@ * libtiff/tif_dirinfo.c: TIFFDataWidth() returns 0 in case of unknown data type. - + 2003-06-19 Frank Warmerdam * libtiff/tif_print.c: fixed some serious bugs when printing - custom tags ... almost certain to crash. + custom tags ... almost certain to crash. * libtiff/tif_dirread.c: Don't ignore custom fields that are autodefined. Not sure how this got to be like this. @@ -3429,12 +3476,12 @@ * tools/tiffcmp.c, man/tiffcmp.1: Fixed problem with unused data comparing as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=349 `-z' option now can be used to set the number of reported different bytes. - + 2003-06-09 Andrey Kiselev * tools/tiffcp.c, man/tiffcp.1: Added possibility to specify value -1 @@ -3460,7 +3507,7 @@ 2003-05-25 Andrey Kiselev * tools/fax2tiff.c: Page numbering fixed, as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=341 2003-05-20 Andrey Kiselev @@ -3526,7 +3573,7 @@ * tools/tiffcp.c: Fixed problem with colorspace conversion for JPEG encoded images. See bug entries - + http://bugzilla.remotesensing.org/show_bug.cgi?id=275 and @@ -3587,16 +3634,16 @@ * libtiff/tif_jpeg.c: Modified to defer initialization of jpeg library so that we can check if there is already any tile/strip data - before deciding between creating a compressor or a decompressor. + before deciding between creating a compressor or a decompressor. 2003-01-31 Frank Warmerdam * libtiff/tif_write.c: TIFFWriteCheck() now fails if the image is - a pre-existing compressed image. That is, image writing to + a pre-existing compressed image. That is, image writing to pre-existing compressed images is not allowed. * libtiff/tif_open.c: Removed error if opening a compressed file - in update mode. + in update mode. http://bugzilla.remotesensing.org/show_bug.cgi?id=198 @@ -3609,16 +3656,16 @@ * cut 3.6.0 Beta release. 2002-12-20 Andrey Kiselev - + * tools/fax2ps.c, man/fax2ps.1: Page size was determined in wrong way as per bug - + http://bugzilla.remotesensing.org/show_bug.cgi?id=239 2002-12-17 Frank Warmerdam - * libtiff/tif_dirread.c: Allow wrong sized arrays in - TIFFFetchStripThing(). + * libtiff/tif_dirread.c: Allow wrong sized arrays in + TIFFFetchStripThing(). http://bugzilla.remotesensing.org/show_bug.cgi?id=49 @@ -3632,7 +3679,7 @@ * libtiff/tif_dir.c: fixed bug with resetting an existing custom field value. - * libtiff/tif_dir.c: Fixed potential problem with ascii "custom" + * libtiff/tif_dir.c: Fixed potential problem with ascii "custom" tags in TIFFVGetField() ... added missing break. 2002-10-14 Frank Warmerdam @@ -3644,11 +3691,11 @@ the eps by redefining the colorimage operator will get messed up. Patch supplied by William Bader. - * Makefile.in: added tif_extension.c to file list as per + * Makefile.in: added tif_extension.c to file list as per http://bugzilla.remotesensing.org/show_bug.cgi?id=218. 2002-10-11 Andrey Kiselev - + * configure, config.site, libtiff/{tif_unix.c, Makefile.in}: Fix for large files (>2GiB) supporting. New option in the config.site: LARGEFILE="yes". Should be enough for I/O of the large files. @@ -3680,13 +3727,13 @@ 2002-10-06 Frank Warmerdam * libtiff/tif_jpeg.c: fixed problem with boolean defined with wrong - size on windows. Use #define boolean hack. + size on windows. Use #define boolean hack. http://bugzilla.remotesensing.org/show_bug.cgi?id=188 * libtiff/tiff.h: Don't do special type handling in tiff.h unless USING_VISUALAGE is defined. - + http://bugzilla.remotesensing.org/show_bug.cgi?id=39 2002-10-03 Frank Warmerdam @@ -3697,30 +3744,30 @@ * libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays by the TIFFFetchByteArray() function. Should finally resolve - + http://bugzilla.remotesensing.org/show_bug.cgi?id=52 - + * configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT * html/Makefile.in: New targets added: html and groffhtml for producing HTML representations of the manual pages automatically. html target uses man2html tool, groffhtml uses groff tool. - + 2002-09-29 Frank Warmerdam * configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support - from John H. DuBois III. + from John H. DuBois III. 2002-09-15 Andrey Kiselev * Makefile.in, /man/{raw2tiff.1, Makefile.in, libtiff.3}: Added manual page for raw2tiff(1) tool. - + 2002-09-12 Andrey Kiselev * /libtiff/{tiffio.h, tif_dir.h}: TIFFDataWidth() declaration moved to the tiffio.h header file. - + * Makefile.in, /man/{TIFFDataWidth.3t, Makefile.in, libtiff.3}: Added manual page for TIFFDataWidth() function @@ -3730,8 +3777,8 @@ as per http://bugzilla.remotesensing.org/show_bug.cgi?id=196. * tools/tiff2ps.c: Don't emit BeginData/EndData DSC comments - since we are unable to properly include the amount to skip. - + since we are unable to properly include the amount to skip. + http://bugzilla.remotesensing.org/show_bug.cgi?id=80 2002-09-02 Andrey Kiselev @@ -3741,7 +3788,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=52 2002-08-22 Andrey Kiselev - + * /libtiff/tif_dirinfo.c: Further additions to free custom fields in _TIFFSetupFieldInfo() function. See http://bugzilla.remotesensing.org/show_bug.cgi?id=169 for details. @@ -3750,14 +3797,14 @@ LZWDecode() and LZWDecodeCompat(). Fixes http://bugzilla.remotesensing.org/show_bug.cgi?id=190 and http://bugzilla.remotesensing.org/show_bug.cgi?id=100 - + * /libtiff/tif_lzw.c: Added check for valid code lengths in LZWDecode() and LZWDecodeCompat(). Fixes http://bugzilla.remotesensing.org/show_bug.cgi?id=115 2002-08-16 Andrey Kiselev - + * /libtiff/{Makefile.vc, libtiff.def}: Missed declarations added. @@ -3768,7 +3815,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=177 - * tif_dir.h: changed FIELD_CODEC to 66 from 64 to avoid overlap + * tif_dir.h: changed FIELD_CODEC to 66 from 64 to avoid overlap with FIELD_CUSTOM as mentioned in bug 169. * tif_close.c: added logic to free dynamically created anonymous @@ -3777,31 +3824,31 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=169 2002-08-10 Andrey Kiselev - + * /tools/{raw2tiff.c, Makefile.in, Makefile.lcc, Makefile.vc}: New tool: raw2tiff --- raw images to TIFF converter. No manual page yet. 2002-07-31 Frank Warmerdam - * libtiff/tif_jpeg.c: Fixed problem with setting of nrows in + * libtiff/tif_jpeg.c: Fixed problem with setting of nrows in JPEGDecode() as per bugzilla bug (issue 1): http://bugzilla.remotesensing.org/show_bug.cgi?id=129 * libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't - present in the tiff tags. + present in the tiff tags. http://bugzilla.remotesensing.org/show_bug.cgi?id=168 * libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and TIFFWriteScanline() now set tif_row explicitly in case the codec has - fooled with the value. + fooled with the value. http://bugzilla.remotesensing.org/show_bug.cgi?id=129 2002-06-22 Andrey Kiselev - + * /tools/tiff2ps.c: Added workaround for some software that may crash when last strip of image contains fewer number of scanlines than specified by the `/Height' variable. See @@ -3817,8 +3864,8 @@ 2002-06-11 Frank Warmerdam - * libtiff/contrib/win95: renamed to contrib/win_dib. Added new - Tiffile.cpp example of converting TIFF files into a DIB on Win32. + * libtiff/contrib/win95: renamed to contrib/win_dib. Added new + Tiffile.cpp example of converting TIFF files into a DIB on Win32. This one is described in: http://bugzilla.remotesensing.org/show_bug.cgi?id=143 @@ -3834,21 +3881,21 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=131 2002-04-26 Andrey Kiselev - + * libtiff/libtiff.def: Added missed declaration. - + 2002-04-22 Andrey Kiselev - + * tools/fax2tiff.c: Updated to reflect latest changes in libtiff. Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=125 2002-04-20 Andrey Kiselev - + * libtiff/tif_open.c: Pointers to custom procedures in TIFFClientOpen() are checked to be not NULL-pointers. - + 2002-04-18 Andrey Kiselev - + * libtiff/libtiff.def: Added missed declarations. * libtiff/tif_pixarlog.c: Updated for using tif_tagmethods structure. @@ -3858,14 +3905,14 @@ * libtiff/tif_lzw.c: Additional checks for data integrity introduced. Should finally close http://bugzilla.remotesensing.org/show_bug.cgi?id=100 - + 2002-04-10 Andrey Kiselev * tools/tiff2ps: Division by zero fixed. Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=88 2002-04-09 Andrey Kiselev - + * libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h: TIFFCheckpointDirectory() routine added. Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=124 @@ -3897,7 +3944,7 @@ replaced by warnings. Now libtiff should read corrupted LZW-compressed files by skipping bad strips. Closes http://bugzilla.remotesensing.org/show_bug.cgi?id=100 - + 2002-04-03 Frank Warmerdam * libtiff/tif_dirwrite.c: Removed some dead code. @@ -3919,18 +3966,18 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=111 - * tif_print.c: Fixed so that ASCII FIELD_CUSTOM values with + * tif_print.c: Fixed so that ASCII FIELD_CUSTOM values with passcount set FALSE can be printed (such as TIFFTAG_SOFTWARE). - * libtiff/tif_dir.c,tif_dirinfo.c,tif_dir.h,tif_ojpeg.c: modified so + * libtiff/tif_dir.c,tif_dirinfo.c,tif_dir.h,tif_ojpeg.c: modified so that TIFFTAG_SOFTWARE uses FIELD_CUSTOM as an example. 2002-03-26 Dwight Kelly * libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c, tif_dirwrite.c: Added get/put code for new tag XMLPACKET as defined - in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0 spec - INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes: + in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0 spec + INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes: CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9). @@ -3989,7 +4036,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=94 - * man/Makefile.in: Patch DESTDIR handling + * man/Makefile.in: Patch DESTDIR handling http://bugzilla.remotesensing.org/show_bug.cgi?id=95 @@ -4027,9 +4074,9 @@ 2002-01-04 Frank Warmerdam - * libtiff/tif_jpeg.c: fixed computation of segment_width for - tiles files to avoid error about it not matching the - cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile + * libtiff/tif_jpeg.c: fixed computation of segment_width for + tiles files to avoid error about it not matching the + cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile size.") for ITIFF files. Apparently the problem was incorporated since 3.5.5, presumably during the OJPEG/JPEG work recently. @@ -4039,7 +4086,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=94 - * libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1 + * libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1 (defined in tiffconf.h - 1 by default) then the RGBA interface will assume that a fourth extra sample is ASSOCALPHA if the EXTRASAMPLE value isn't set for it. This changes the behaviour of @@ -4051,9 +4098,9 @@ 2001-12-12 Frank Warmerdam - * libtiff/tif_jpeg.c: allow jpeg data stream sampling values to - override those from tiff directory. This makes this work with - ImageGear generated files. + * libtiff/tif_jpeg.c: allow jpeg data stream sampling values to + override those from tiff directory. This makes this work with + ImageGear generated files. 2001-12-07 Frank Warmerdam @@ -4066,7 +4113,7 @@ * Reissue 3.5.7 release. * libtiff/mkversion.c: Fix output of TIFF_VERSION to be - YYYYMMDD so that it is increasing over time. + YYYYMMDD so that it is increasing over time. * Makefile.in: Ensure that tiffvers.h is regenerated in the make release target. @@ -4091,8 +4138,8 @@ 2001-10-10 Frank Warmerdam - * libtiff/tiff.h: I have created COMPRESSION_CCITT_T4, - COMPRESSION_CCITT_T6, TIFFTAG_T4OPTIONS and TIFFTAG_T6OPTIONS aliases + * libtiff/tiff.h: I have created COMPRESSION_CCITT_T4, + COMPRESSION_CCITT_T6, TIFFTAG_T4OPTIONS and TIFFTAG_T6OPTIONS aliases in keeping with TIFF 6.0 standard in tiff.h http://bugzilla.remotesensing.org/show_bug.cgi?id=83 @@ -4112,10 +4159,10 @@ error about LZW not being available. * libtiff/tif_dir.c: propagate failure to initialize compression - back from TIFFSetField() as an error status, so applications can + back from TIFFSetField() as an error status, so applications can detect failure. - * libtiff/tif_dir.c: removed the auto replacement of + * libtiff/tif_dir.c: removed the auto replacement of COMPRESSION_LZW with COMPRESSION_NONE in _TIFFVSetField(). * Removed Makefile, tools/Makefile, port/install.sh, man/Makefile @@ -4123,7 +4170,7 @@ 2001-09-22 Frank Warmerdam - * libtiff/tif_ojpeg.c: new update from Scott. + * libtiff/tif_ojpeg.c: new update from Scott. 2001-09-09 Frank Warmerdam @@ -4142,7 +4189,7 @@ http://bugzilla.remotesensing.org/show_bug.cgi?id=47 - * tools/tiff2ps.c: added OJPEG YCbCr to RGB support. + * tools/tiff2ps.c: added OJPEG YCbCr to RGB support. * libtiff/tif_ojpeg.c: Applied substantial patch from Scott. @@ -4151,14 +4198,14 @@ * libtiff/tif_packbits.c: fixed memory overrun error. http://bugzilla.remotesensing.org/show_bug.cgi?id=77 - + 2001-08-31 Frank Warmerdam * libtiff/tif_getimage.c: relax handling of contig case where there are extra samples that are supposed to be ignored. This - should now work for 8bit greyscale or palletted images. + should now work for 8bit greyscale or palletted images. - http://bugzilla.remotesensing.org/show_bug.cgi?id=75 + http://bugzilla.remotesensing.org/show_bug.cgi?id=75 2001-08-28 Frank Warmerdam @@ -4171,15 +4218,15 @@ * libtiff/tif_getimage.c: Use memmove() instead of TIFFmemcpy() in TIFFReadRGBATile() to avoid issues in cases of overlapping - buffers. See Bug 69 in Bugzilla. + buffers. See Bug 69 in Bugzilla. http://bugzilla.remotesensing.org/show_bug.cgi?id=69 - + * tools/tiff2rgba.c: fixed getopt() call so that -b works again. 2001-08-09 Frank Warmerdam - * libtiff/tiff.h, libtiff/tif_fax3.c: added check for __LP64__ + * libtiff/tiff.h, libtiff/tif_fax3.c: added check for __LP64__ when checking for 64 bit architectures as per bugzilla bug 67. 2001-07-27 Frank Warmerdam @@ -4189,7 +4236,7 @@ 2001-07-20 Frank Warmerdam - * libtiff/tif_jpeg.c: Define HAVE_BOOLEAN on windows if RPCNDR.H + * libtiff/tif_jpeg.c: Define HAVE_BOOLEAN on windows if RPCNDR.H has been included. 2001-07-19 Frank Warmerdam @@ -4201,11 +4248,11 @@ * libtiff/tif_ojpeg.c: updates from Scott. Handles colors much better. Now depends on having patched libjpeg as per - patch in contrib/ojpeg/*. + patch in contrib/ojpeg/*. 2001-07-17 Frank Warmerdam - * */Makefile.in: added DESTDIR support. + * */Makefile.in: added DESTDIR support. http://bugzilla.remotesensing.org/show_bug.cgi?id=60 @@ -4213,20 +4260,20 @@ * configure, libtiff/Makefile.in: applied OpenBSD patches as per: - + http://bugzilla.remotesensing.org/show_bug.cgi?id=61 2001-06-28 Frank Warmerdam * libtiff/tif_getimage.c: Fixed so that failure is properly - reported by gtTileContig, gtStripContig, gtTileSeparate and + reported by gtTileContig, gtStripContig, gtTileSeparate and gtStripSeparate. See http://bugzilla.remotesensing.org/show_bug.cgi?id=51 - * tiffcmp.c: Fixed multi samples per pixel support for ContigCompare. + * tiffcmp.c: Fixed multi samples per pixel support for ContigCompare. Updated bug section of tiffcmp.1 to note tiled file issues. - + See http://bugzilla.remotesensing.org/show_bug.cgi?id=53 2001-06-22 Frank Warmerdam @@ -4267,10 +4314,10 @@ 2001-05-08 Frank Warmerdam - * libtiff/tif_dirinfo.c: moved pixar and copyright flags to + * libtiff/tif_dirinfo.c: moved pixar and copyright flags to ensure everything is in order. - * libtiff/libtiff.def: added TIFFCreateDirectory and + * libtiff/libtiff.def: added TIFFCreateDirectory and TIFFDefaultStripSize as per: http://bugzilla.remotesensing.org/show_bug.cgi?id=46 @@ -4279,10 +4326,10 @@ * libtiff/tif_dirinfo.c: Modified the TIFF_BYTE definition for TIFFTAG_PHOTOSHOP to use a writecount of TIFF_VARIABLE2 (-3) to - force use of uint32 counts instead of short counts. + force use of uint32 counts instead of short counts. * libtiff/tif_dirwrite.c: Added support for TIFF_VARIABLE2 in the - case of writing TIFF_BYTE/TIFF_SBYTE fields. + case of writing TIFF_BYTE/TIFF_SBYTE fields. http://bugzilla.remotesensing.org/show_bug.cgi?id=43 @@ -4318,20 +4365,20 @@ with the inttypes.h include file on AIX. See http://bugzilla.remotesensing.org/show_bug.cgi?id=39 - + * VERSION: update to 3.5.7 beta in preparation for release. * configure/config.site: modified to check if -lm is needed for MACHDEPLIBS if not supplied by config.site. Needed for Darwin. - * config.guess: updated wholesale to an FSF version apparently - from 1998 (as opposed to 1994). This is mainly inspired by + * config.guess: updated wholesale to an FSF version apparently + from 1998 (as opposed to 1994). This is mainly inspired by providing for MacOS X support. 2001-03-29 Frank Warmerdam * configure, Makefile.in, etc: added support for OPTIMIZER being - set from config.site. + set from config.site. 2001-03-28 Frank Warmerdam @@ -4350,7 +4397,7 @@ (in particular short ones) print properly. See http://bugzilla.remotesensing.org/show_bug.cgi?id=35 - + * tiff2ps.c/tiff2ps.1: Substantial changes to tiff2ps by Bruce A. Mallett. See check message for detailed information on all the changes, including a faster encoder, fixes for level @@ -4358,7 +4405,7 @@ 2001-03-27 Frank Warmerdam - * libtiff/tiffio.h: Changed "#if LOGLUV_PUBLIC" to + * libtiff/tiffio.h: Changed "#if LOGLUV_PUBLIC" to "#ifdef LOGLUV_PUBLIC" so it will work with VisualAge on AIX. http://bugzilla.remotesensing.org/show_bug.cgi?id=39 @@ -4370,7 +4417,7 @@ 2001-03-13 Frank Warmerdam - * tif_getimage.c: Added support for 16bit minisblack/miniswhite + * tif_getimage.c: Added support for 16bit minisblack/miniswhite images in RGBA interface. 2001-03-02 Frank Warmerdam @@ -4381,29 +4428,29 @@ * Brent Roman contributed updated tiffcp utility (and tiffcp.1) with support for extracting subimages with the ,n syntax, and also - adding the -b bias removal flag. + adding the -b bias removal flag. 2001-02-16 Frank Warmerdam * libtiff/libtiff.def: Brent Roman submitted new version adding - serveral missing entry points. + serveral missing entry points. * libtiff/tif_dirinfo.c: don't declare tiffFieldInfo static on VMS. - Some sort of weird VMS thing. + Some sort of weird VMS thing. http://bugzilla.remotesensing.org/show_bug.cgi?id=31 - * tif_luv.c/tiff.h/tiffio.h: - New version of TIFF LogLuv (SGILOG) modules contributed by Greg Ward + * tif_luv.c/tiff.h/tiffio.h: + New version of TIFF LogLuv (SGILOG) modules contributed by Greg Ward (greg@shutterfly.com). He writes: 1) I improved the gamut-mapping function in tif_luv.c for imaginary - colors, because some images were being super-saturated on the input + colors, because some images were being super-saturated on the input side and this resulted in some strange color shifts in the output. 2) I added a psuedotag in tiff.h to control random dithering during - LogLuv encoding. This is turned off by default for 32-bit LogLuv and - on for 24-bit LogLuv output. Dithering improves the average color + LogLuv encoding. This is turned off by default for 32-bit LogLuv and + on for 24-bit LogLuv output. Dithering improves the average color accuracy over the image. 3) I added a #define for LOG_LUV_PUBLIC, which is enabled by default in @@ -4416,20 +4463,20 @@ 2001-01-23 Frank Warmerdam * tif_fax3.c: keep rw_mode flag internal to fax3 state to remember - whether we are encoding or decoding. This is to ensure graceful + whether we are encoding or decoding. This is to ensure graceful recovery if TIFFClientOpen() discovers an attempt to open a compressed - file for "r+" access, and subsequently close it, as it resets the + file for "r+" access, and subsequently close it, as it resets the tif_mode flag to O_RDONLY in this case to avoid writes, confusing the compressor's concept of whether it is in encode or decode mode. -2001-01-08 Mike Welles +2001-01-08 Mike Welles * Makefile.in: Now cleaning up after itself after creating the .tar.gz and .zip - + 2001-01-07 Frank Warmerdam * html/libtiff.html: Fixed arguments in example for TIFFRGBAImageGet() - as per bug report by Patrick Connor. + as per bug report by Patrick Connor. 2000-12-28 Frank Warmerdam @@ -4437,12 +4484,12 @@ * Fixed libtiff/makefile.vc to make tiffvers.h not version.h. -2000-12-22 Mike Welles +2000-12-22 Mike Welles * added link to CVS mirror from index.html - - * updated html/internals.html to note that LZW compression is - not supported by default. - + + * updated html/internals.html to note that LZW compression is + not supported by default. + 2000-12-22 Frank Warmerdam * updated html/libtiff.html to not point at Niles' old JPL web site @@ -4454,19 +4501,19 @@ Leonard Rosenthol . May interfere with correct building on older systems. If so, please let me know. -2000-12-19 Mike Welles +2000-12-19 Mike Welles - * Took out LZW Encoding from tif_lzw.c + * Took out LZW Encoding from tif_lzw.c * Created HOWTO-RELEASE * Created html/v3.5.6.html * updated index.html - + 2000-12-01 Frank Warmerdam - * Added patches for EOFB support in tif_fax3.c and tif_fax3.h. + * Added patches for EOFB support in tif_fax3.c and tif_fax3.h. Patches supplied by Frank Cringle Example file at: ftp://ftp.remotesensing.org/pub/libtiff/eofb_396.tif @@ -4480,30 +4527,30 @@ targets so libtiff.so will be built with an explicit dependency on libm.so. - * libtiff/Makefile.in: Use softlinks to link libtiff.so.3 to - libtiff.so.3.5.5. + * libtiff/Makefile.in: Use softlinks to link libtiff.so.3 to + libtiff.so.3.5.5. - * libtiff/Makefile.in & configure: Remove all references to the ALPHA - file, or ALPHA version logic. Added stuff about DIST_POINT in + * libtiff/Makefile.in & configure: Remove all references to the ALPHA + file, or ALPHA version logic. Added stuff about DIST_POINT in place of DIST_TYPE and the alpha release number stuff. 2000-11-22 Frank Warmerdam * I have applied a patch from Steffen Moeller to - the configure script so that it now accepts the --prefix, and - --exec-prefix directives. + the configure script so that it now accepts the --prefix, and + --exec-prefix directives. 2000-11-13 Frank Warmerdam - * I have made a variety of modifications in an effort to ensure the + * I have made a variety of modifications in an effort to ensure the TIFFLIB_VERSION macro is automatically generated from the RELEASE-DATE - file which seems to be updated regularly. + file which seems to be updated regularly. - o mkversion.c now reads RELEASE-DATE and emits TIFFLIB_VERSION in - version include file. - o renamed version.h to tiffvers.h because we now have to install it - with the public libtiff include files. - o include tiffvers.h in tiffio.h. + o mkversion.c now reads RELEASE-DATE and emits TIFFLIB_VERSION in + version include file. + o renamed version.h to tiffvers.h because we now have to install it + with the public libtiff include files. + o include tiffvers.h in tiffio.h. o updated tif_version.c to use tiffvers.h. o Updated Makefile.in accordingly. @@ -4517,13 +4564,13 @@ See http://bugzilla.remotesensing.org/show_bug.cgi?id=20 Some patches from Rick LaMont of Dot C Software. - * Modified tif_packbits.c encoder to avoid compressing more + * Modified tif_packbits.c encoder to avoid compressing more data than provided if rowsize doesn't factor into provided data (such as occurs for YCbCr). 2000-10-19 Frank Warmerdam - * tools/rgb2ycbcr.c: fixed output strip size to account for vertical + * tools/rgb2ycbcr.c: fixed output strip size to account for vertical roundup if rows_per_strip not a multiple of vertical sample size. 2000-10-16 Frank Warmerdam @@ -4539,8 +4586,8 @@ 2000-10-12 Frank Warmerdam * Modified tiff2bw to ensure portions add to 100%, and that - white is properly recovered. - + white is properly recovered. + See bug http://bugzilla.remotesensing.org/show_bug.cgi?id=15 Patch c/o Stanislav Brabec @@ -4554,26 +4601,26 @@ 2000-09-27 Frank Warmerdam - * Added GNULDdso target an`d switched linux and freebsd to use it. + * Added GNULDdso target an`d switched linux and freebsd to use it. 2000-09-26 Frank Warmerdam * Applied patch for 0x0000 sequences in tif_fax3.h's definition - of EXPAND1D() as per bug 11 (from Roman). + of EXPAND1D() as per bug 11 (from Roman). 2000-09-25 Frank Warmerdam * Fixed tiffcomp.h to avoid win32 stuff if unix #defined, to improve cygwin compatibility. * Applied patch from Roman Shpount to tif_fax3.c. This seems to - be a proper fix to the buffer sizing problem. See + be a proper fix to the buffer sizing problem. See http://bugzilla.remotesensing.org/show_bug.cgi?id=11 * Fixed tif_getimage.c to fix overrun bug with YCbCr images without downsampling. http://bugzilla.remotesensing.org/show_bug.cgi?id=10 Thanks to Nick Lamb for reporting the bug and proving the patch. - + 2000-09-18 Frank Warmerdam * Fixed tif_jpeg.c so avoid destroying the decompressor before @@ -4603,15 +4650,15 @@ * Tentatively added support for SAMPLEFORMAT_COMPLEXIEEEFP, and SAMPLEFORMAT_COMPLEXINT. -2000-07-13 Mike Welles +2000-07-13 Mike Welles + + * index.html, bugs.html: added bugzilla info. - * index.html, bugs.html: added bugzilla info. - 2000-07-12 Frank Warmerdam * tif_read.c: fix subtle bug with determining the number of rows for strips that are the last strip in a separation but - not the last strip of all in TIFFReadEncodedStrip(). + not the last strip of all in TIFFReadEncodedStrip(). * Applied 16/32 bit fix to tif_fax3.c. Fix supplied by Peter Skarpetis @@ -4633,7 +4680,7 @@ * libtiff/tif_dirread.c: Don't use estimate strip byte count for one tile/strip images with an offset, and byte count of zero. These - could be "unpopulated" images. + could be "unpopulated" images. 2000-04-18 Frank Warmerdam @@ -4648,17 +4695,17 @@ Tue Apr 18 16:18:08 2000 Frank Warmerdam 2000-04-12 Mike Welles * configure: Fixed stupid mistake in libc6 test on Linux -2000-04-04 Mike Welles +2000-04-04 Mike Welles * tif_win32.c: Applied patch to fix overreads and ovverwrites - caught by BoundsChecker. From Arvan Pritchard - (untested). - - * tif_getimage.c: Applied patch to silence VC6 warnings. From + caught by BoundsChecker. From Arvan Pritchard + (untested). + + * tif_getimage.c: Applied patch to silence VC6 warnings. From Arvan Pritchard - - * tif_lzw.c: Applied patch to silence VC6 warnings. From + + * tif_lzw.c: Applied patch to silence VC6 warnings. From Arvan Pritchard - + 2000-03-28 Frank Warmerdam * Added contrib/stream (stream io) code submitted by Avi Bleiweiss. @@ -4668,34 +4715,34 @@ Tue Apr 18 16:18:08 2000 Frank Warmerdam * fax2ps: Fixed mixup of width and height in bounding box statement as per submission by Nalin Dahyabhai . -2000-03-27 Mike Welles +2000-03-27 Mike Welles - * fax2ps: Modified printruns to take uint32 instead of uint16. - Patch courtesy of Bernt Herd - -2000-03-20 Mike Welles + * fax2ps: Modified printruns to take uint32 instead of uint16. + Patch courtesy of Bernt Herd - * configure: added test for libc6 for linux targets. Bug reported by +2000-03-20 Mike Welles + + * configure: added test for libc6 for linux targets. Bug reported by Stanislav Brabec - * Added 3.5 docs to html/Makefile.in. + * Added 3.5 docs to html/Makefile.in. Thanks to Stanislav Brabec - * configure: fixed bugs in sed scripts - (applied sed script s:/@:s;@:;s:/s;;:;: to configure). + * configure: fixed bugs in sed scripts + (applied sed script s:/@:s;@:;s:/s;;:;: to configure). fix submitted to Stanislav Brabec - * tools/iptcutil was not in files list, and wasn't being + * tools/iptcutil was not in files list, and wasn't being added to tar archive. Updated Makefile.in. 2000-03-17 Frank Warmerdam * tif_fax3.c: Fixed serious bug introduced during the uint16->uint32 - conversion for the run arrays. + conversion for the run arrays. 2000-03-03 Frank Warmerdam - * Set td_sampleformat default to SAMPLEFORMAT_UINT instead of + * Set td_sampleformat default to SAMPLEFORMAT_UINT instead of SAMPLEFORMAT_VOID in TIFFDefaultDirectory() in tif_dir.c. 2000-03-02 Frank Warmerdam @@ -4716,20 +4763,20 @@ Tue Feb 15 22:01:05 2000 Frank Warmerdam set to 1, and added default (off) setting in tiffconf.h. This should eventually be set by the configure script somehow. - The original work on all these 2-4GB changes was done by + The original work on all these 2-4GB changes was done by Peter Smith (psmith@creo.com). * Modified tif_win32.c to support 2-4GB seeks. * tentatively changed toff_t to be unsigned instead of signed to - facilitate support for 2-4GB files. + facilitate support for 2-4GB files. * Updated a variety of files to use toff_t. Fixed some mixups between toff_t and tsize_t. Fri Jan 28 10:13:49 2000 Frank Warmerdam - * Largely reimplemented contrib/addtiffo to avoid temp files, + * Largely reimplemented contrib/addtiffo to avoid temp files, updating the TIFF file in place. Fixed a few other bugs to. * Set tif_rawdatasize to zero when freeing raw data buffer in @@ -4738,7 +4785,7 @@ Fri Jan 28 10:13:49 2000 Frank Warmerdam * Enabled "REWRITE_HACK" in tif_write.c by default. * Fix bug in tif_write.c when switching between reading one directory - and writing to another. + and writing to another. * Made TIFFWriteCheck() public, and added TIFFCreateDirectory() @@ -4750,41 +4797,41 @@ Tue Jan 4 13:39:00 2000 Frank Warmerdam * Added libtiff/libtiff.def to TIFFILES distribution list. -Mon Dec 27 12:13:39 EST 1999 Mike Welles +Mon Dec 27 12:13:39 EST 1999 Mike Welles - * Created lzw compression kit, as a new module (libtiff-lzw-compression-kit). + * Created lzw compression kit, as a new module (libtiff-lzw-compression-kit). * Altered descriptions in tools to reflect "by default" lzw not supported - * Updated index.html to note lzw compression kit. - + * Updated index.html to note lzw compression kit. + Tue Dec 21 14:01:51 1999 Frank Warmerdam - * Added fax3sm_winnt.c to distribution list in Makefile.in. + * Added fax3sm_winnt.c to distribution list in Makefile.in. Tue Dec 21 11:04:45 EST 1999 Mike Welles *** 3.5.4 release *** - - * Aadded Pixar tag support. Contributed by Phil Beffery - * Made one more change to tif_dir.c for removal of LZW compression. Also added notice - when LZW compression invoked. + * Aadded Pixar tag support. Contributed by Phil Beffery + + * Made one more change to tif_dir.c for removal of LZW compression. Also added notice + when LZW compression invoked. * Changed default compression in tools to TIFF_PACKBITS, and changed usage descriptions in tools to reflect removal of LZW compression - + Mon Dec 20 18:39:02 EST 1999 Mike Welles - * Fixed bug that caused LZW (non) compression to segfault. Added - warning about LZW compression removed being removed, and why. + * Fixed bug that caused LZW (non) compression to segfault. Added + warning about LZW compression removed being removed, and why. + + * Added nostrip to install in tools/Makefile.in so that debugging + symbols are kept. - * Added nostrip to install in tools/Makefile.in so that debugging - symbols are kept. - Tue Dec 7 12:04:47 EST 1999 Mike Welles - * Added patch from Ivo Penzar , - supporting Adobe ZIP deflate. Untested. - + * Added patch from Ivo Penzar , + supporting Adobe ZIP deflate. Untested. + Sat Dec 4 15:47:11 1999 Frank Warmerdam * Made Packbits the default compression in tools/tiff2rgba.c instead @@ -4794,12 +4841,12 @@ Tue Nov 30 14:41:43 1999 Frank Warmerdam *** 3.5 * Added tif_luv to contrib/djgpp/Makefile.lib. -Tue Nov 30 14:15:32 EST 1999 Mike Welles +Tue Nov 30 14:15:32 EST 1999 Mike Welles + + * Added zip creation to relase makefile target - * Added zip creation to relase makefile target + * Added html for TIFFWriteTile.3t man page. - * Added html for TIFFWriteTile.3t man page. - Tue Nov 30 09:20:16 1999 Frank Warmerdam * Added some changes to tif_write.c to support rewriting existing @@ -4812,26 +4859,26 @@ Mon Nov 29 11:43:42 1999 Frank Warmerdam Sun Nov 28 20:36:18 1999 Frank Warmerdam - * Added notes on use of makefile.vc in build.html, and fixed + * Added notes on use of makefile.vc in build.html, and fixed email subscription address. -199-11-28 Mike Welles +1999-11-28 Mike Welles - * Fixed apocalypse-inducing y2k bug in contrib/ras/ras2tiff.c + * Fixed apocalypse-inducing y2k bug in contrib/ras/ras2tiff.c * Did some casts cleaning up to reduce compiler warnings in tif_fax3.c, - from Bruce Carmeron -- modifications of - changes made by Frank (sun cc still complained on cast). + from Bruce Carmeron -- modifications of + changes made by Frank (sun cc still complained on cast). * Added tiffconf.h to install target per request from Bill Radcliffe : "We need a way for ImageMagick to know features have been compiled into the TIFF library in order to - handle things properly". - + handle things properly". + Sat Nov 27 16:49:21 1999 Frank Warmerdam * fixed various VC++ warnings as suggested by Gilles Vollant - . + . Wed Nov 24 12:08:16 1999 Frank Warmerdam @@ -4840,59 +4887,59 @@ Wed Nov 24 12:08:16 1999 Frank Warmerdam 1999-11-22 Mike Welles * HTML-ized the man pages, added to html/man - - * Removed LZW Compression to comply with Unisys patent extortion. - -1999-09-29 Mike Welles - * Corrected one remaining 16 -> 32 bit value in tif_fax3.c, - From Ivo Penzar + * Corrected one remaining 16 -> 32 bit value in tif_fax3.c, + From Ivo Penzar - + 1999-09-26 Mike Welles *** 3.5.2 release *** - * Corrected alpha versioning. + * Corrected alpha versioning. - * Removed distinction between alpha and release targets in Makefile.in. + * Removed distinction between alpha and release targets in Makefile.in. - * added release.stamp target, which tags cvs tree, and updates + * added release.stamp target, which tags cvs tree, and updates "RELEASE-DATE" - * added releasediff target, which diffs tree with source as of + * added releasediff target, which diffs tree with source as of date in "RELEASE-DATE" - - * Ticked up version to 3.5.2 (alpha 01 -- but I think we'll moving - away from alpha/non-alpha distinctions). - * updated html to reflect release - + * Ticked up version to 3.5.2 (alpha 01 -- but I think we'll moving + away from alpha/non-alpha distinctions). + + * updated html to reflect release + 1999-09-23 * Set O_BINARY for tif_unix.c open() ... used on cygwin for instance. * Added CYGWIN case in configure. -Fri Sep 17 00:13:51 CEST 1999 Mike Welles +Fri Sep 17 00:13:51 CEST 1999 Mike Welles + + * Applied Francois Dagand's patch to handle fax decompression bug. + (sizes >= 65536 were failing) - * Applied Francois Dagand's patch to handle fax decompression bug. - (sizes >= 65536 were failing) - Tue Sep 14 21:31:43 1999 Frank Warmerdam - * Applied "a" mode fix to tif_win32.c/TIFFOpen() as suggested + * Applied "a" mode fix to tif_win32.c/TIFFOpen() as suggested by Christopher Lawton Wed Sep 8 08:19:18 1999 Frank Warmerdam - * Added IRIX/gcc, and OSF/1 4.x support on behalf of + * Added IRIX/gcc, and OSF/1 4.x support on behalf of Albert Chin-A-Young - * Added TIFFReassignTagToIgnore() API on behalf of + * Added TIFFReassignTagToIgnore() API on behalf of Bruce Cameron . Man page still pending. Wed Aug 25 11:39:07 1999 Frank Warmerdam - * Added test target in Makefile, test_pics.sh script and pics/*.rpt + * Added test target in Makefile, test_pics.sh script and pics/*.rpt files to provide for a rudimentary testsuite. * Added contrib/tags back from old distribution ... fixed up a bit. @@ -4900,7 +4947,7 @@ Wed Aug 25 11:39:07 1999 Frank Warmerdam 1999-08-16 * Added simple makefile.vc makefiles for building with MS VC++ - on Windows NT/98/95 in console mode. Stuff in contrib/win* make give + on Windows NT/98/95 in console mode. Stuff in contrib/win* make give better solutions for some users. Mon Aug 16 21:52:11 1999 Frank Warmerdam @@ -4910,20 +4957,20 @@ Mon Aug 16 21:52:11 1999 Frank Warmerdam 1999-08-16 Michael L. Welles - * Updated html/index.html with anon CVS instructions. + * Updated html/index.html with anon CVS instructions. Mon Aug 16 13:18:41 1999 Frank Warmerdam - * pre-remove so link before softlink in LINUXdso action in + * pre-remove so link before softlink in LINUXdso action in libtiff/Makefile.in to avoid failure on LINUXdso builds other than the first. * Fixed problem with cvtcmap() in tif_getimage.c modifying the colormaps owned by the TIFF handle itself when trying to fixup wrong (eight bit) colormaps. Corrected by maintaining a private copy of - the colormap. + the colormap. - * Added TIFFReadRGBATile()/TIFFReadRGBAStrip() support in + * Added TIFFReadRGBATile()/TIFFReadRGBAStrip() support in tif_getimage.c. * CVS Repository placed at remotesensing.org. ChangeLog added. diff --git a/Makefile.in b/Makefile.in index 72fbbf3..2ed5682 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/aclocal.m4 b/aclocal.m4 index d7d14c8..9293eda 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.12.4 -*- Autoconf -*- +# generated automatically by aclocal 1.12.5 -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. @@ -34,7 +34,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.12' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.12.4], [], +m4_if([$1], [1.12.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -50,7 +50,7 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.12.4])dnl +[AM_AUTOMAKE_VERSION([1.12.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) diff --git a/build/Makefile.in b/build/Makefile.in index 1a316b1..cea7a08 100644 --- a/build/Makefile.in +++ b/build/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/Makefile.in b/contrib/Makefile.in index ae67554..72be7a3 100644 --- a/contrib/Makefile.in +++ b/contrib/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/acorn/Makefile.in b/contrib/acorn/Makefile.in index 1e966b4..5a73941 100644 --- a/contrib/acorn/Makefile.in +++ b/contrib/acorn/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/addtiffo/Makefile.in b/contrib/addtiffo/Makefile.in index 25a6e8b..e07640c 100644 --- a/contrib/addtiffo/Makefile.in +++ b/contrib/addtiffo/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/dbs/Makefile.in b/contrib/dbs/Makefile.in index f5b3ee5..d5e7b40 100644 --- a/contrib/dbs/Makefile.in +++ b/contrib/dbs/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/dbs/xtiff/Makefile.in b/contrib/dbs/xtiff/Makefile.in index 2d1ce94..c655c54 100644 --- a/contrib/dbs/xtiff/Makefile.in +++ b/contrib/dbs/xtiff/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/dbs/xtiff/xtiff.c b/contrib/dbs/xtiff/xtiff.c index 7fe3977..de0b2a7 100644 --- a/contrib/dbs/xtiff/xtiff.c +++ b/contrib/dbs/xtiff/xtiff.c @@ -1,5 +1,5 @@ /* - * $Id: xtiff.c,v 1.2.2.1 2010-06-08 18:50:40 bfriesen Exp $ + * $Id: xtiff.c,v 1.2.2.2 2013-05-02 14:44:43 tgl Exp $ * * xtiff - view a TIFF file in an X window * @@ -512,9 +512,9 @@ SetNameLabel() Arg args[1]; if (tfMultiPage) - sprintf(buffer, "%s - page %d", fileName, tfDirectory); + snprintf(buffer, sizeof(buffer), "%s - page %d", fileName, tfDirectory); else - strcpy(buffer, fileName); + snprintf(buffer, sizeof(buffer), "%s", fileName); XtSetArg(args[0], XtNlabel, buffer); XtSetValues(labelWidget, args, 1); } diff --git a/contrib/iptcutil/Makefile.in b/contrib/iptcutil/Makefile.in index 75b1ca3..5858c03 100644 --- a/contrib/iptcutil/Makefile.in +++ b/contrib/iptcutil/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/mac-cw/Makefile.in b/contrib/mac-cw/Makefile.in index a94a33a..054d44e 100644 --- a/contrib/mac-cw/Makefile.in +++ b/contrib/mac-cw/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/mac-mpw/Makefile.in b/contrib/mac-mpw/Makefile.in index 8fdaae1..7dd27d7 100644 --- a/contrib/mac-mpw/Makefile.in +++ b/contrib/mac-mpw/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/mfs/Makefile.in b/contrib/mfs/Makefile.in index 230c925..4ee41af 100644 --- a/contrib/mfs/Makefile.in +++ b/contrib/mfs/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/pds/Makefile.in b/contrib/pds/Makefile.in index 3511f62..fa0bcf7 100644 --- a/contrib/pds/Makefile.in +++ b/contrib/pds/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/ras/Makefile.in b/contrib/ras/Makefile.in index 88907bf..e33a00f 100644 --- a/contrib/ras/Makefile.in +++ b/contrib/ras/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/stream/Makefile.in b/contrib/stream/Makefile.in index 9c9dffb..1c36a7f 100644 --- a/contrib/stream/Makefile.in +++ b/contrib/stream/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/tags/Makefile.in b/contrib/tags/Makefile.in index e378f32..891d565 100644 --- a/contrib/tags/Makefile.in +++ b/contrib/tags/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/contrib/win_dib/Makefile.in b/contrib/win_dib/Makefile.in index 0f68e76..45bf928 100644 --- a/contrib/win_dib/Makefile.in +++ b/contrib/win_dib/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/html/Makefile.in b/html/Makefile.in index b9f86c8..a85ebd6 100644 --- a/html/Makefile.in +++ b/html/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/html/images/Makefile.in b/html/images/Makefile.in index 1b96240..eaf50a3 100644 --- a/html/images/Makefile.in +++ b/html/images/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/html/man/Makefile.in b/html/man/Makefile.in index 3a5278e..98226c3 100644 --- a/html/man/Makefile.in +++ b/html/man/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/libtiff/Makefile.in b/libtiff/Makefile.in index 6a7c415..69e59c7 100644 --- a/libtiff/Makefile.in +++ b/libtiff/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/libtiff/tif_codec.c b/libtiff/tif_codec.c index d5c6fd1..5a38184 100644 --- a/libtiff/tif_codec.c +++ b/libtiff/tif_codec.c @@ -1,4 +1,4 @@ -/* $Id: tif_codec.c,v 1.10.2.2 2010-06-08 18:50:41 bfriesen Exp $ */ +/* $Id: tif_codec.c,v 1.10.2.3 2013-05-02 14:44:43 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -104,7 +104,8 @@ _notConfigured(TIFF* tif) const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); char compression_code[20]; - sprintf( compression_code, "%d", tif->tif_dir.td_compression ); + snprintf(compression_code, sizeof(compression_code), "%d", + tif->tif_dir.td_compression ); TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "%s compression support is not configured", c ? c->name : compression_code ); diff --git a/libtiff/tif_dirinfo.c b/libtiff/tif_dirinfo.c index 76ef572..417a2e3 100644 --- a/libtiff/tif_dirinfo.c +++ b/libtiff/tif_dirinfo.c @@ -1,4 +1,4 @@ -/* $Id: tif_dirinfo.c,v 1.65.2.10 2010-07-06 14:14:41 dron Exp $ */ +/* $Id: tif_dirinfo.c,v 1.65.2.11 2013-05-02 14:44:43 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -869,7 +869,7 @@ _TIFFCreateAnonFieldInfo(TIFF *tif, ttag_t tag, TIFFDataType field_type) * note that this name is a special sign to TIFFClose() and * _TIFFSetupFieldInfo() to free the field */ - sprintf(fld->field_name, "Tag %d", (int) tag); + snprintf(fld->field_name, 32, "Tag %d", (int) tag); return fld; } diff --git a/libtiff/tif_pixarlog.c b/libtiff/tif_pixarlog.c index ed8eb40..6e127fb 100644 --- a/libtiff/tif_pixarlog.c +++ b/libtiff/tif_pixarlog.c @@ -1,4 +1,4 @@ -/* $Id: tif_pixarlog.c,v 1.15.2.4 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_pixarlog.c,v 1.15.2.5 2012-12-10 17:38:54 tgl Exp $ */ /* * Copyright (c) 1996-1997 Sam Leffler @@ -117,9 +117,9 @@ horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - t0 = ToLinearF[cr = wp[0]]; - t1 = ToLinearF[cg = wp[1]]; - t2 = ToLinearF[cb = wp[2]]; + t0 = ToLinearF[cr = (wp[0] & mask)]; + t1 = ToLinearF[cg = (wp[1] & mask)]; + t2 = ToLinearF[cb = (wp[2] & mask)]; op[0] = t0; op[1] = t1; op[2] = t2; @@ -136,10 +136,10 @@ horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, op[2] = t2; } } else if (stride == 4) { - t0 = ToLinearF[cr = wp[0]]; - t1 = ToLinearF[cg = wp[1]]; - t2 = ToLinearF[cb = wp[2]]; - t3 = ToLinearF[ca = wp[3]]; + t0 = ToLinearF[cr = (wp[0] & mask)]; + t1 = ToLinearF[cg = (wp[1] & mask)]; + t2 = ToLinearF[cb = (wp[2] & mask)]; + t3 = ToLinearF[ca = (wp[3] & mask)]; op[0] = t0; op[1] = t1; op[2] = t2; @@ -183,9 +183,9 @@ horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - t0 = ToLinearF[cr = wp[0]] * SCALE12; - t1 = ToLinearF[cg = wp[1]] * SCALE12; - t2 = ToLinearF[cb = wp[2]] * SCALE12; + t0 = ToLinearF[cr = (wp[0] & mask)] * SCALE12; + t1 = ToLinearF[cg = (wp[1] & mask)] * SCALE12; + t2 = ToLinearF[cb = (wp[2] & mask)] * SCALE12; op[0] = CLAMP12(t0); op[1] = CLAMP12(t1); op[2] = CLAMP12(t2); @@ -202,10 +202,10 @@ horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op, op[2] = CLAMP12(t2); } } else if (stride == 4) { - t0 = ToLinearF[cr = wp[0]] * SCALE12; - t1 = ToLinearF[cg = wp[1]] * SCALE12; - t2 = ToLinearF[cb = wp[2]] * SCALE12; - t3 = ToLinearF[ca = wp[3]] * SCALE12; + t0 = ToLinearF[cr = (wp[0] & mask)] * SCALE12; + t1 = ToLinearF[cg = (wp[1] & mask)] * SCALE12; + t2 = ToLinearF[cb = (wp[2] & mask)] * SCALE12; + t3 = ToLinearF[ca = (wp[3] & mask)] * SCALE12; op[0] = CLAMP12(t0); op[1] = CLAMP12(t1); op[2] = CLAMP12(t2); @@ -247,9 +247,9 @@ horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - op[0] = ToLinear16[cr = wp[0]]; - op[1] = ToLinear16[cg = wp[1]]; - op[2] = ToLinear16[cb = wp[2]]; + op[0] = ToLinear16[cr = (wp[0] & mask)]; + op[1] = ToLinear16[cg = (wp[1] & mask)]; + op[2] = ToLinear16[cb = (wp[2] & mask)]; n -= 3; while (n > 0) { wp += 3; @@ -260,10 +260,10 @@ horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op, op[2] = ToLinear16[(cb += wp[2]) & mask]; } } else if (stride == 4) { - op[0] = ToLinear16[cr = wp[0]]; - op[1] = ToLinear16[cg = wp[1]]; - op[2] = ToLinear16[cb = wp[2]]; - op[3] = ToLinear16[ca = wp[3]]; + op[0] = ToLinear16[cr = (wp[0] & mask)]; + op[1] = ToLinear16[cg = (wp[1] & mask)]; + op[2] = ToLinear16[cb = (wp[2] & mask)]; + op[3] = ToLinear16[ca = (wp[3] & mask)]; n -= 4; while (n > 0) { wp += 4; @@ -342,9 +342,9 @@ horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - op[0] = ToLinear8[cr = wp[0]]; - op[1] = ToLinear8[cg = wp[1]]; - op[2] = ToLinear8[cb = wp[2]]; + op[0] = ToLinear8[cr = (wp[0] & mask)]; + op[1] = ToLinear8[cg = (wp[1] & mask)]; + op[2] = ToLinear8[cb = (wp[2] & mask)]; n -= 3; while (n > 0) { n -= 3; @@ -355,10 +355,10 @@ horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op, op[2] = ToLinear8[(cb += wp[2]) & mask]; } } else if (stride == 4) { - op[0] = ToLinear8[cr = wp[0]]; - op[1] = ToLinear8[cg = wp[1]]; - op[2] = ToLinear8[cb = wp[2]]; - op[3] = ToLinear8[ca = wp[3]]; + op[0] = ToLinear8[cr = (wp[0] & mask)]; + op[1] = ToLinear8[cg = (wp[1] & mask)]; + op[2] = ToLinear8[cb = (wp[2] & mask)]; + op[3] = ToLinear8[ca = (wp[3] & mask)]; n -= 4; while (n > 0) { n -= 4; @@ -393,9 +393,9 @@ horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op, mask = CODE_MASK; if (stride == 3) { op[0] = 0; - t1 = ToLinear8[cb = wp[2]]; - t2 = ToLinear8[cg = wp[1]]; - t3 = ToLinear8[cr = wp[0]]; + t1 = ToLinear8[cb = (wp[2] & mask)]; + t2 = ToLinear8[cg = (wp[1] & mask)]; + t3 = ToLinear8[cr = (wp[0] & mask)]; op[1] = t1; op[2] = t2; op[3] = t3; @@ -413,10 +413,10 @@ horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op, op[3] = t3; } } else if (stride == 4) { - t0 = ToLinear8[ca = wp[3]]; - t1 = ToLinear8[cb = wp[2]]; - t2 = ToLinear8[cg = wp[1]]; - t3 = ToLinear8[cr = wp[0]]; + t0 = ToLinear8[ca = (wp[3] & mask)]; + t1 = ToLinear8[cb = (wp[2] & mask)]; + t2 = ToLinear8[cg = (wp[1] & mask)]; + t3 = ToLinear8[cr = (wp[0] & mask)]; op[0] = t0; op[1] = t1; op[2] = t2; @@ -630,10 +630,10 @@ PixarLogGuessDataFmt(TIFFDirectory *td) return guess; } -static uint32 -multiply(size_t m1, size_t m2) +static tsize_t +multiply(tsize_t m1, tsize_t m2) { - uint32 bytes = m1 * m2; + tsize_t bytes = m1 * m2; if (m1 && bytes / m1 != m2) bytes = 0; @@ -641,6 +641,20 @@ multiply(size_t m1, size_t m2) return bytes; } +static tsize_t +add_ms(tsize_t m1, tsize_t m2) +{ + tsize_t bytes = m1 + m2; + + /* if either input is zero, assume overflow already occurred */ + if (m1 == 0 || m2 == 0) + bytes = 0; + else if (bytes <= m1 || bytes <= m2) + bytes = 0; + + return bytes; +} + static int PixarLogSetupDecode(TIFF* tif) { @@ -661,6 +675,8 @@ PixarLogSetupDecode(TIFF* tif) td->td_samplesperpixel : 1); tbuf_size = multiply(multiply(multiply(sp->stride, td->td_imagewidth), td->td_rowsperstrip), sizeof(uint16)); + /* add one more stride in case input ends mid-stride */ + tbuf_size = add_ms(tbuf_size, sizeof(uint16) * sp->stride); if (tbuf_size == 0) return (0); sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size); diff --git a/libtiff/tif_print.c b/libtiff/tif_print.c index 7634f6e..2b255da 100644 --- a/libtiff/tif_print.c +++ b/libtiff/tif_print.c @@ -1,4 +1,4 @@ -/* $Id: tif_print.c,v 1.36.2.5 2010-07-06 14:05:30 dron Exp $ */ +/* $Id: tif_print.c,v 1.36.2.6 2012-12-12 23:18:05 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -514,8 +514,19 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) continue; if(fip->field_passcount) { - if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1) + if (fip->field_readcount == TIFF_VARIABLE2 ) { + if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1) + continue; + } else if (fip->field_readcount == TIFF_VARIABLE ) { + uint16 small_value_count; + if(TIFFGetField(tif, tag, &small_value_count, &raw_data) != 1) + continue; + value_count = small_value_count; + } else { + assert (fip->field_readcount == TIFF_VARIABLE + || fip->field_readcount == TIFF_VARIABLE2); continue; + } } else { if (fip->field_readcount == TIFF_VARIABLE || fip->field_readcount == TIFF_VARIABLE2) diff --git a/man/Makefile.in b/man/Makefile.in index a007da7..cac0721 100644 --- a/man/Makefile.in +++ b/man/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/port/Makefile.in b/port/Makefile.in index 6674109..f95d58f 100644 --- a/port/Makefile.in +++ b/port/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/test/Makefile.in b/test/Makefile.in index 61ea1ff..f88959f 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/tools/Makefile.in b/tools/Makefile.in index 47dcec8..6f3d517 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.12.4 from Makefile.am. +# Makefile.in generated by automake 1.12.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2012 Free Software Foundation, Inc. diff --git a/tools/ppm2tiff.c b/tools/ppm2tiff.c index 6078459..ec8be5d 100644 --- a/tools/ppm2tiff.c +++ b/tools/ppm2tiff.c @@ -1,4 +1,4 @@ -/* $Id: ppm2tiff.c,v 1.13.2.2 2010-06-08 18:50:44 bfriesen Exp $ */ +/* $Id: ppm2tiff.c,v 1.13.2.3 2012-12-10 18:27:35 tgl Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler @@ -68,6 +68,17 @@ BadPPM(char* file) exit(-2); } +static tsize_t +multiply_ms(tsize_t m1, tsize_t m2) +{ + tsize_t bytes = m1 * m2; + + if (m1 && bytes / m1 != m2) + bytes = 0; + + return bytes; +} + int main(int argc, char* argv[]) { @@ -85,6 +96,7 @@ main(int argc, char* argv[]) int c; extern int optind; extern char* optarg; + tsize_t scanline_size; if (argc < 2) { fprintf(stderr, "%s: Too few arguments\n", argv[0]); @@ -217,7 +229,8 @@ main(int argc, char* argv[]) } switch (bpp) { case 1: - linebytes = (spp * w + (8 - 1)) / 8; + /* if round-up overflows, result will be zero, OK */ + linebytes = (multiply_ms(spp, w) + (8 - 1)) / 8; if (rowsperstrip == (uint32) -1) { TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, h); } else { @@ -226,15 +239,31 @@ main(int argc, char* argv[]) } break; case 8: - linebytes = spp * w; + linebytes = multiply_ms(spp, w); TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(out, rowsperstrip)); break; } - if (TIFFScanlineSize(out) > linebytes) + if (linebytes == 0) { + fprintf(stderr, "%s: scanline size overflow\n", infile); + (void) TIFFClose(out); + exit(-2); + } + scanline_size = TIFFScanlineSize(out); + if (scanline_size == 0) { + /* overflow - TIFFScanlineSize already printed a message */ + (void) TIFFClose(out); + exit(-2); + } + if (scanline_size < linebytes) buf = (unsigned char *)_TIFFmalloc(linebytes); else - buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out)); + buf = (unsigned char *)_TIFFmalloc(scanline_size); + if (buf == NULL) { + fprintf(stderr, "%s: Not enough memory\n", infile); + (void) TIFFClose(out); + exit(-2); + } if (resolution > 0) { TIFFSetField(out, TIFFTAG_XRESOLUTION, resolution); TIFFSetField(out, TIFFTAG_YRESOLUTION, resolution); diff --git a/tools/rgb2ycbcr.c b/tools/rgb2ycbcr.c index 0b30b51..527c036 100644 --- a/tools/rgb2ycbcr.c +++ b/tools/rgb2ycbcr.c @@ -1,4 +1,4 @@ -/* $Id: rgb2ycbcr.c,v 1.9.2.2 2010-06-08 18:50:44 bfriesen Exp $ */ +/* $Id: rgb2ycbcr.c,v 1.9.2.3 2013-05-02 14:44:44 tgl Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler @@ -326,7 +326,8 @@ tiffcvt(TIFF* in, TIFF* out) TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); { char buf[2048]; char *cp = strrchr(TIFFFileName(in), '/'); - sprintf(buf, "YCbCr conversion of %s", cp ? cp+1 : TIFFFileName(in)); + snprintf(buf, sizeof(buf), "YCbCr conversion of %s", + cp ? cp+1 : TIFFFileName(in)); TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, buf); } TIFFSetField(out, TIFFTAG_SOFTWARE, TIFFGetVersion()); diff --git a/tools/tiff2bw.c b/tools/tiff2bw.c index 8fbf061..98908d1 100644 --- a/tools/tiff2bw.c +++ b/tools/tiff2bw.c @@ -1,4 +1,4 @@ -/* $Id: tiff2bw.c,v 1.12.2.2 2010-07-02 12:03:27 dron Exp $ */ +/* $Id: tiff2bw.c,v 1.12.2.3 2013-05-02 14:44:44 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -201,7 +201,7 @@ main(int argc, char* argv[]) } } TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); - sprintf(thing, "B&W version of %s", argv[optind]); + snprintf(thing, sizeof(thing), "B&W version of %s", argv[optind]); TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing); TIFFSetField(out, TIFFTAG_SOFTWARE, "tiff2bw"); outbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out)); diff --git a/tools/tiff2pdf.c b/tools/tiff2pdf.c index dee6435..c55b927 100644 --- a/tools/tiff2pdf.c +++ b/tools/tiff2pdf.c @@ -1,4 +1,4 @@ -/* $Id: tiff2pdf.c,v 1.37.2.22 2012-07-19 15:43:31 tgl Exp $ +/* $Id: tiff2pdf.c,v 1.37.2.24 2013-05-02 14:54:18 tgl Exp $ * * tiff2pdf - converts a TIFF image to a PDF document * @@ -3337,33 +3337,56 @@ int t2p_process_jpeg_strip( uint32 height){ tsize_t i=0; - uint16 ri =0; - uint16 v_samp=1; - uint16 h_samp=1; - int j=0; - - i++; - - while(i<(*striplength)){ + + while (i < *striplength) { + tsize_t datalen; + uint16 ri; + uint16 v_samp; + uint16 h_samp; + int j; + int ncomp; + + /* marker header: one or more FFs */ + if (strip[i] != 0xff) + return(0); + i++; + while (i < *striplength && strip[i] == 0xff) + i++; + if (i >= *striplength) + return(0); + /* SOI is the only pre-SOS marker without a length word */ + if (strip[i] == 0xd8) + datalen = 0; + else { + if ((*striplength - i) <= 2) + return(0); + datalen = (strip[i+1] << 8) | strip[i+2]; + if (datalen < 2 || datalen >= (*striplength - i)) + return(0); + } switch( strip[i] ){ - case 0xd8: - /* SOI - start of image */ + case 0xd8: /* SOI - start of image */ _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), 2); *bufferoffset+=2; - i+=2; break; - case 0xc0: - case 0xc1: - case 0xc3: - case 0xc9: - case 0xca: + case 0xc0: /* SOF0 */ + case 0xc1: /* SOF1 */ + case 0xc3: /* SOF3 */ + case 0xc9: /* SOF9 */ + case 0xca: /* SOF10 */ if(no==0){ - _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), strip[i+2]+2); - for(j=0;j>4) > h_samp) - h_samp = (buffer[*bufferoffset+11+(2*j)]>>4); - if( (buffer[*bufferoffset+11+(2*j)] & 0x0f) > v_samp) - v_samp = (buffer[*bufferoffset+11+(2*j)] & 0x0f); + _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), datalen+2); + ncomp = buffer[*bufferoffset+9]; + if (ncomp < 1 || ncomp > 4) + return(0); + v_samp=1; + h_samp=1; + for(j=0;j>4) > h_samp) + h_samp = (samp>>4); + if( (samp & 0x0f) > v_samp) + v_samp = (samp & 0x0f); } v_samp*=8; h_samp*=8; @@ -3377,45 +3400,43 @@ int t2p_process_jpeg_strip( (unsigned char) ((height>>8) & 0xff); buffer[*bufferoffset+6]= (unsigned char) (height & 0xff); - *bufferoffset+=strip[i+2]+2; - i+=strip[i+2]+2; - + *bufferoffset+=datalen+2; + /* insert a DRI marker */ buffer[(*bufferoffset)++]=0xff; buffer[(*bufferoffset)++]=0xdd; buffer[(*bufferoffset)++]=0x00; buffer[(*bufferoffset)++]=0x04; buffer[(*bufferoffset)++]=(ri >> 8) & 0xff; buffer[(*bufferoffset)++]= ri & 0xff; - } else { - i+=strip[i+2]+2; } break; - case 0xc4: - case 0xdb: - _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), strip[i+2]+2); - *bufferoffset+=strip[i+2]+2; - i+=strip[i+2]+2; + case 0xc4: /* DHT */ + case 0xdb: /* DQT */ + _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), datalen+2); + *bufferoffset+=datalen+2; break; - case 0xda: + case 0xda: /* SOS */ if(no==0){ - _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), strip[i+2]+2); - *bufferoffset+=strip[i+2]+2; - i+=strip[i+2]+2; + _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), datalen+2); + *bufferoffset+=datalen+2; } else { buffer[(*bufferoffset)++]=0xff; buffer[(*bufferoffset)++]= (unsigned char)(0xd0 | ((no-1)%8)); - i+=strip[i+2]+2; } - _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), (*striplength)-i-1); - *bufferoffset+=(*striplength)-i-1; + i += datalen + 1; + /* copy remainder of strip */ + _TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i]), *striplength - i); + *bufferoffset+= *striplength - i; return(1); default: - i+=strip[i+2]+2; + /* ignore any other marker */ + break; } + i += datalen + 1; } - + /* failed to find SOS marker */ return(0); } #endif @@ -3605,7 +3626,9 @@ tsize_t t2p_write_pdf_header(T2P* t2p, TIFF* output){ char buffer[16]; int buflen=0; - buflen=sprintf(buffer, "%%PDF-%u.%u ", t2p->pdf_majorversion&0xff, t2p->pdf_minorversion&0xff); + buflen = snprintf(buffer, sizeof(buffer), "%%PDF-%u.%u ", + t2p->pdf_majorversion&0xff, + t2p->pdf_minorversion&0xff); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t)"\n%\342\343\317\323\n", 7); @@ -3619,10 +3642,10 @@ tsize_t t2p_write_pdf_header(T2P* t2p, TIFF* output){ tsize_t t2p_write_pdf_obj_start(uint32 number, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; - buflen=sprintf(buffer, "%lu", (unsigned long)number); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)number); written += t2pWriteFile(output, (tdata_t) buffer, buflen ); written += t2pWriteFile(output, (tdata_t) " 0 obj\n", 7); @@ -3661,13 +3684,13 @@ tsize_t t2p_write_pdf_name(unsigned char* name, TIFF* output){ written += t2pWriteFile(output, (tdata_t) "/", 1); for (i=0;i 0x7E){ - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); nextchar=1; @@ -3675,57 +3698,57 @@ tsize_t t2p_write_pdf_name(unsigned char* name, TIFF* output){ if (nextchar==0){ switch (name[i]){ case 0x23: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x25: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x28: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x29: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x2F: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x3C: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x3E: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x5B: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x5D: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x7B: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; case 0x7D: - sprintf(buffer, "#%.2X", name[i]); + snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); buffer[sizeof(buffer) - 1] = '\0'; written += t2pWriteFile(output, (tdata_t) buffer, 3); break; @@ -3840,14 +3863,14 @@ tsize_t t2p_write_pdf_stream_end(TIFF* output){ tsize_t t2p_write_pdf_stream_dict(tsize_t len, uint32 number, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; written += t2pWriteFile(output, (tdata_t) "/Length ", 8); if(len!=0){ written += t2p_write_pdf_stream_length(len, output); } else { - buflen=sprintf(buffer, "%lu", (unsigned long)number); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)number); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R \n", 6); } @@ -3888,10 +3911,10 @@ tsize_t t2p_write_pdf_stream_dict_end(TIFF* output){ tsize_t t2p_write_pdf_stream_length(tsize_t len, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; - buflen=sprintf(buffer, "%lu", (unsigned long)len); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)len); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "\n", 1); @@ -3905,7 +3928,7 @@ tsize_t t2p_write_pdf_stream_length(tsize_t len, TIFF* output){ tsize_t t2p_write_pdf_catalog(T2P* t2p, TIFF* output) { tsize_t written = 0; - char buffer[16]; + char buffer[32]; int buflen = 0; written += t2pWriteFile(output, @@ -3944,7 +3967,6 @@ tsize_t t2p_write_pdf_info(T2P* t2p, TIFF* input, TIFF* output) written += t2p_write_pdf_string(t2p->pdf_datetime, output); } written += t2pWriteFile(output, (tdata_t) "\n/Producer ", 11); - _TIFFmemset((tdata_t)buffer, 0x00, sizeof(buffer)); snprintf(buffer, sizeof(buffer), "libtiff / tiff2pdf - %d", TIFFLIB_VERSION); written += t2p_write_pdf_string(buffer, output); written += t2pWriteFile(output, (tdata_t) "\n", 1); @@ -4085,7 +4107,7 @@ tsize_t t2p_write_pdf_pages(T2P* t2p, TIFF* output) { tsize_t written=0; tdir_t i=0; - char buffer[16]; + char buffer[32]; int buflen=0; int page=0; @@ -4093,7 +4115,7 @@ tsize_t t2p_write_pdf_pages(T2P* t2p, TIFF* output) (tdata_t) "<< \n/Type /Pages \n/Kids [ ", 26); page = t2p->pdf_pages+1; for (i=0;itiff_pagecount;i++){ - buflen=sprintf(buffer, "%d", page); + buflen=snprintf(buffer, sizeof(buffer), "%d", page); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); if ( ((i+1)%8)==0 ) { @@ -4108,8 +4130,7 @@ tsize_t t2p_write_pdf_pages(T2P* t2p, TIFF* output) } } written += t2pWriteFile(output, (tdata_t) "] \n/Count ", 10); - _TIFFmemset(buffer, 0x00, 16); - buflen=sprintf(buffer, "%d", t2p->tiff_pagecount); + buflen=snprintf(buffer, sizeof(buffer), "%d", t2p->tiff_pagecount); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " \n>> \n", 6); @@ -4124,28 +4145,28 @@ tsize_t t2p_write_pdf_page(uint32 object, T2P* t2p, TIFF* output){ unsigned int i=0; tsize_t written=0; - char buffer[16]; + char buffer[256]; int buflen=0; written += t2pWriteFile(output, (tdata_t) "<<\n/Type /Page \n/Parent ", 24); - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_pages); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_pages); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R \n", 6); written += t2pWriteFile(output, (tdata_t) "/MediaBox [", 11); - buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.x1); + buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.x1); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " ", 1); - buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.y1); + buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.y1); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " ", 1); - buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.x2); + buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.x2); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " ", 1); - buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.y2); + buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.y2); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "] \n", 3); written += t2pWriteFile(output, (tdata_t) "/Contents ", 10); - buflen=sprintf(buffer, "%lu", (unsigned long)(object + 1)); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(object + 1)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R \n", 6); written += t2pWriteFile(output, (tdata_t) "/Resources << \n", 15); @@ -4153,15 +4174,13 @@ tsize_t t2p_write_pdf_page(uint32 object, T2P* t2p, TIFF* output){ written += t2pWriteFile(output, (tdata_t) "/XObject <<\n", 12); for(i=0;itiff_tiles[t2p->pdf_page].tiles_tilecount;i++){ written += t2pWriteFile(output, (tdata_t) "/Im", 3); - buflen = sprintf(buffer, "%u", t2p->pdf_page+1); + buflen = snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_page+1); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "_", 1); - buflen = sprintf(buffer, "%u", i+1); + buflen = snprintf(buffer, sizeof(buffer), "%u", i+1); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " ", 1); - buflen = sprintf( - buffer, - "%lu", + buflen = snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(object+3+(2*i)+t2p->tiff_pages[t2p->pdf_page].page_extra)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); @@ -4173,12 +4192,10 @@ tsize_t t2p_write_pdf_page(uint32 object, T2P* t2p, TIFF* output){ } else { written += t2pWriteFile(output, (tdata_t) "/XObject <<\n", 12); written += t2pWriteFile(output, (tdata_t) "/Im", 3); - buflen = sprintf(buffer, "%u", t2p->pdf_page+1); + buflen = snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_page+1); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " ", 1); - buflen = sprintf( - buffer, - "%lu", + buflen = snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(object+3+(2*i)+t2p->tiff_pages[t2p->pdf_page].page_extra)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); @@ -4187,9 +4204,7 @@ tsize_t t2p_write_pdf_page(uint32 object, T2P* t2p, TIFF* output){ if(t2p->tiff_transferfunctioncount != 0) { written += t2pWriteFile(output, (tdata_t) "/ExtGState <<", 13); t2pWriteFile(output, (tdata_t) "/GS1 ", 5); - buflen = sprintf( - buffer, - "%lu", + buflen = snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(object + 3)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); @@ -4562,7 +4577,7 @@ tsize_t t2p_write_pdf_page_content_stream(T2P* t2p, TIFF* output){ if(t2p->tiff_tiles[t2p->pdf_page].tiles_tilecount>0){ for(i=0;itiff_tiles[t2p->pdf_page].tiles_tilecount; i++){ box=t2p->tiff_tiles[t2p->pdf_page].tiles_tiles[i].tile_box; - buflen=sprintf(buffer, + buflen=snprintf(buffer, sizeof(buffer), "q %s %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d_%ld Do Q\n", t2p->tiff_transferfunctioncount?"/GS1 gs ":"", box.mat[0], @@ -4577,7 +4592,7 @@ tsize_t t2p_write_pdf_page_content_stream(T2P* t2p, TIFF* output){ } } else { box=t2p->pdf_imagebox; - buflen=sprintf(buffer, + buflen=snprintf(buffer, sizeof(buffer), "q %s %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d Do Q\n", t2p->tiff_transferfunctioncount?"/GS1 gs ":"", box.mat[0], @@ -4602,59 +4617,48 @@ tsize_t t2p_write_pdf_xobject_stream_dict(ttile_t tile, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; written += t2p_write_pdf_stream_dict(0, t2p->pdf_xrefcount+1, output); written += t2pWriteFile(output, (tdata_t) "/Type /XObject \n/Subtype /Image \n/Name /Im", 42); - buflen=sprintf(buffer, "%u", t2p->pdf_page+1); + buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_page+1); written += t2pWriteFile(output, (tdata_t) buffer, buflen); if(tile != 0){ written += t2pWriteFile(output, (tdata_t) "_", 1); - buflen=sprintf(buffer, "%lu", (unsigned long)tile); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)tile); written += t2pWriteFile(output, (tdata_t) buffer, buflen); } written += t2pWriteFile(output, (tdata_t) "\n/Width ", 8); - _TIFFmemset((tdata_t)buffer, 0x00, 16); if(tile==0){ - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->tiff_width); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_width); } else { if(t2p_tile_is_right_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)!=0){ - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth); } else { - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth); } } written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "\n/Height ", 9); - _TIFFmemset((tdata_t)buffer, 0x00, 16); if(tile==0){ - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->tiff_length); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_length); } else { if(t2p_tile_is_bottom_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)!=0){ - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilelength); } else { - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength); } } written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "\n/BitsPerComponent ", 19); - _TIFFmemset((tdata_t)buffer, 0x00, 16); - buflen=sprintf(buffer, "%u", t2p->tiff_bitspersample); + buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->tiff_bitspersample); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "\n/ColorSpace ", 13); written += t2p_write_pdf_xobject_cs(t2p, output); @@ -4698,11 +4702,10 @@ tsize_t t2p_write_pdf_xobject_cs(T2P* t2p, TIFF* output){ t2p->pdf_colorspace ^= T2P_CS_PALETTE; written += t2p_write_pdf_xobject_cs(t2p, output); t2p->pdf_colorspace |= T2P_CS_PALETTE; - buflen=sprintf(buffer, "%u", (0x0001 << t2p->tiff_bitspersample)-1 ); + buflen=snprintf(buffer, sizeof(buffer), "%u", (0x0001 << t2p->tiff_bitspersample)-1 ); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " ", 1); - _TIFFmemset(buffer, 0x00, 16); - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_palettecs ); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_palettecs ); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ]\n", 7); return(written); @@ -4736,10 +4739,10 @@ tsize_t t2p_write_pdf_xobject_cs(T2P* t2p, TIFF* output){ X_W /= Y_W; Z_W /= Y_W; Y_W = 1.0F; - buflen=sprintf(buffer, "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W); + buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "/Range ", 7); - buflen=sprintf(buffer, "[%d %d %d %d] \n", + buflen=snprintf(buffer, sizeof(buffer), "[%d %d %d %d] \n", t2p->pdf_labrange[0], t2p->pdf_labrange[1], t2p->pdf_labrange[2], @@ -4755,26 +4758,26 @@ tsize_t t2p_write_pdf_xobject_cs(T2P* t2p, TIFF* output){ tsize_t t2p_write_pdf_transfer(T2P* t2p, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; written += t2pWriteFile(output, (tdata_t) "<< /Type /ExtGState \n/TR ", 25); if(t2p->tiff_transferfunctioncount == 1){ - buflen=sprintf(buffer, "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount + 1)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); } else { written += t2pWriteFile(output, (tdata_t) "[ ", 2); - buflen=sprintf(buffer, "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount + 1)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); - buflen=sprintf(buffer, "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount + 2)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); - buflen=sprintf(buffer, "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount + 3)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R ", 5); @@ -4796,7 +4799,7 @@ tsize_t t2p_write_pdf_transfer_dict(T2P* t2p, TIFF* output, uint16 i){ written += t2pWriteFile(output, (tdata_t) "/FunctionType 0 \n", 17); written += t2pWriteFile(output, (tdata_t) "/Domain [0.0 1.0] \n", 19); written += t2pWriteFile(output, (tdata_t) "/Range [0.0 1.0] \n", 18); - buflen=sprintf(buffer, "/Size [%u] \n", (1<tiff_bitspersample)); + buflen=snprintf(buffer, sizeof(buffer), "/Size [%u] \n", (1<tiff_bitspersample)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "/BitsPerSample 16 \n", 19); written += t2p_write_pdf_stream_dict(1<<(t2p->tiff_bitspersample+1), 0, output); @@ -4823,7 +4826,7 @@ tsize_t t2p_write_pdf_transfer_stream(T2P* t2p, TIFF* output, uint16 i){ tsize_t t2p_write_pdf_xobject_calcs(T2P* t2p, TIFF* output){ tsize_t written=0; - char buffer[128]; + char buffer[256]; int buflen=0; float X_W=0.0; @@ -4891,16 +4894,16 @@ tsize_t t2p_write_pdf_xobject_calcs(T2P* t2p, TIFF* output){ written += t2pWriteFile(output, (tdata_t) "<< \n", 4); if(t2p->pdf_colorspace & T2P_CS_CALGRAY){ written += t2pWriteFile(output, (tdata_t) "/WhitePoint ", 12); - buflen=sprintf(buffer, "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W); + buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "/Gamma 2.2 \n", 12); } if(t2p->pdf_colorspace & T2P_CS_CALRGB){ written += t2pWriteFile(output, (tdata_t) "/WhitePoint ", 12); - buflen=sprintf(buffer, "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W); + buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "/Matrix ", 8); - buflen=sprintf(buffer, "[%.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f] \n", + buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f] \n", X_R, Y_R, Z_R, X_G, Y_G, Z_G, X_B, Y_B, Z_B); @@ -4919,11 +4922,11 @@ tsize_t t2p_write_pdf_xobject_calcs(T2P* t2p, TIFF* output){ tsize_t t2p_write_pdf_xobject_icccs(T2P* t2p, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; written += t2pWriteFile(output, (tdata_t) "[/ICCBased ", 11); - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_icccs); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_icccs); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " 0 R] \n", 7); @@ -4933,11 +4936,11 @@ tsize_t t2p_write_pdf_xobject_icccs(T2P* t2p, TIFF* output){ tsize_t t2p_write_pdf_xobject_icccs_dict(T2P* t2p, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; written += t2pWriteFile(output, (tdata_t) "/N ", 3); - buflen=sprintf(buffer, "%u \n", t2p->tiff_samplesperpixel); + buflen=snprintf(buffer, sizeof(buffer), "%u \n", t2p->tiff_samplesperpixel); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) "/Alternate ", 11); t2p->pdf_colorspace ^= T2P_CS_ICCBASED; @@ -5002,7 +5005,7 @@ tsize_t t2p_write_pdf_xobject_decode(T2P* t2p, TIFF* output){ tsize_t t2p_write_pdf_xobject_stream_filter(ttile_t tile, T2P* t2p, TIFF* output){ tsize_t written=0; - char buffer[16]; + char buffer[32]; int buflen=0; if(t2p->pdf_compression==T2P_COMPRESS_NONE){ @@ -5017,41 +5020,33 @@ tsize_t t2p_write_pdf_xobject_stream_filter(ttile_t tile, T2P* t2p, TIFF* output written += t2pWriteFile(output, (tdata_t) "<< /K -1 ", 9); if(tile==0){ written += t2pWriteFile(output, (tdata_t) "/Columns ", 9); - buflen=sprintf(buffer, "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_width); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " /Rows ", 7); - buflen=sprintf(buffer, "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_length); written += t2pWriteFile(output, (tdata_t) buffer, buflen); } else { if(t2p_tile_is_right_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)==0){ written += t2pWriteFile(output, (tdata_t) "/Columns ", 9); - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth); written += t2pWriteFile(output, (tdata_t) buffer, buflen); } else { written += t2pWriteFile(output, (tdata_t) "/Columns ", 9); - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth); written += t2pWriteFile(output, (tdata_t) buffer, buflen); } if(t2p_tile_is_bottom_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)==0){ written += t2pWriteFile(output, (tdata_t) " /Rows ", 7); - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength); written += t2pWriteFile(output, (tdata_t) buffer, buflen); } else { written += t2pWriteFile(output, (tdata_t) " /Rows ", 7); - buflen=sprintf( - buffer, - "%lu", + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilelength); written += t2pWriteFile(output, (tdata_t) buffer, buflen); } @@ -5078,21 +5073,17 @@ tsize_t t2p_write_pdf_xobject_stream_filter(ttile_t tile, T2P* t2p, TIFF* output if(t2p->pdf_compressionquality%100){ written += t2pWriteFile(output, (tdata_t) "/DecodeParms ", 13); written += t2pWriteFile(output, (tdata_t) "<< /Predictor ", 14); - _TIFFmemset(buffer, 0x00, 16); - buflen=sprintf(buffer, "%u", t2p->pdf_compressionquality%100); + buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_compressionquality%100); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " /Columns ", 10); - _TIFFmemset(buffer, 0x00, 16); - buflen = sprintf(buffer, "%lu", + buflen = snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_width); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " /Colors ", 9); - _TIFFmemset(buffer, 0x00, 16); - buflen=sprintf(buffer, "%u", t2p->tiff_samplesperpixel); + buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->tiff_samplesperpixel); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " /BitsPerComponent ", 19); - _TIFFmemset(buffer, 0x00, 16); - buflen=sprintf(buffer, "%u", t2p->tiff_bitspersample); + buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->tiff_bitspersample); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) ">>\n", 3); } @@ -5112,16 +5103,16 @@ tsize_t t2p_write_pdf_xobject_stream_filter(ttile_t tile, T2P* t2p, TIFF* output tsize_t t2p_write_pdf_xreftable(T2P* t2p, TIFF* output){ tsize_t written=0; - char buffer[21]; + char buffer[64]; int buflen=0; uint32 i=0; written += t2pWriteFile(output, (tdata_t) "xref\n0 ", 7); - buflen=sprintf(buffer, "%lu", (unsigned long)(t2p->pdf_xrefcount + 1)); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount + 1)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); written += t2pWriteFile(output, (tdata_t) " \n0000000000 65535 f \n", 22); for (i=0;ipdf_xrefcount;i++){ - sprintf(buffer, "%.10lu 00000 n \n", + snprintf(buffer, sizeof(buffer), "%.10lu 00000 n \n", (unsigned long)t2p->pdf_xrefoffsets[i]); written += t2pWriteFile(output, (tdata_t) buffer, 20); } @@ -5145,17 +5136,14 @@ tsize_t t2p_write_pdf_trailer(T2P* t2p, TIFF* output) snprintf(t2p->pdf_fileid + i, 9, "%.8X", rand()); written += t2pWriteFile(output, (tdata_t) "trailer\n<<\n/Size ", 17); - buflen = sprintf(buffer, "%lu", (unsigned long)(t2p->pdf_xrefcount+1)); + buflen = snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount+1)); written += t2pWriteFile(output, (tdata_t) buffer, buflen); - _TIFFmemset(buffer, 0x00, 32); written += t2pWriteFile(output, (tdata_t) "\n/Root ", 7); - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_catalog); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_catalog); written += t2pWriteFile(output, (tdata_t) buffer, buflen); - _TIFFmemset(buffer, 0x00, 32); written += t2pWriteFile(output, (tdata_t) " 0 R \n/Info ", 12); - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_info); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_info); written += t2pWriteFile(output, (tdata_t) buffer, buflen); - _TIFFmemset(buffer, 0x00, 32); written += t2pWriteFile(output, (tdata_t) " 0 R \n/ID[<", 11); written += t2pWriteFile(output, (tdata_t) t2p->pdf_fileid, sizeof(t2p->pdf_fileid) - 1); @@ -5163,9 +5151,8 @@ tsize_t t2p_write_pdf_trailer(T2P* t2p, TIFF* output) written += t2pWriteFile(output, (tdata_t) t2p->pdf_fileid, sizeof(t2p->pdf_fileid) - 1); written += t2pWriteFile(output, (tdata_t) ">]\n>>\nstartxref\n", 16); - buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_startxref); + buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_startxref); written += t2pWriteFile(output, (tdata_t) buffer, buflen); - _TIFFmemset(buffer, 0x00, 32); written += t2pWriteFile(output, (tdata_t) "\n%%EOF\n", 7); return(written); diff --git a/tools/tiff2ps.c b/tools/tiff2ps.c index 2d02b23..b9befe7 100644 --- a/tools/tiff2ps.c +++ b/tools/tiff2ps.c @@ -1,4 +1,4 @@ -/* $Id: tiff2ps.c,v 1.35.2.7 2011-04-09 16:53:56 bfriesen Exp $ */ +/* $Id: tiff2ps.c,v 1.35.2.9 2013-05-02 14:44:44 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -44,6 +44,11 @@ /* * Revision history + * 2013-Jan-21 + * Richard Nolde: Fix bug in auto rotate option code. Once a + * rotation angle was set by the auto rotate check, it was + * retained for all pages that followed instead of being + * retested for each page. * * 2010-Sep-17 * Richard Nolde: Reinstate code from Feb 2009 that never got @@ -423,9 +428,10 @@ main(int argc, char* argv[]) /* auto rotate requires a specified page width and height */ if (auto_rotate == TRUE) { + /* if ((pageWidth == 0) || (pageHeight == 0)) TIFFWarning ("-r auto", " requires page height and width specified with -h and -w"); - + */ if ((maxPageWidth > 0) || (maxPageHeight > 0)) { TIFFError ("-r auto", " is incompatible with maximum page width/height specified by -H or -W"); @@ -1594,6 +1600,8 @@ int TIFF2PS(FILE* fd, TIFF* tif, double pgwidth, double pgheight, double lm, dou } if (generateEPSF) break; + if (auto_rotate) + rotation = 0.0; TIFFGetFieldDefaulted(tif, TIFFTAG_SUBFILETYPE, &subfiletype); } while (((subfiletype & FILETYPE_PAGE) || printAll) && TIFFReadDirectory(tif)); @@ -1783,8 +1791,8 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h) imageOp = "imagemask"; (void)strcpy(im_x, "0"); - (void)sprintf(im_y, "%lu", (long) h); - (void)sprintf(im_h, "%lu", (long) h); + (void)snprintf(im_y, sizeof(im_y), "%lu", (long) h); + (void)snprintf(im_h, sizeof(im_h), "%lu", (long) h); tile_width = w; tile_height = h; if (TIFFIsTiled(tif)) { @@ -1805,7 +1813,7 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h) } if (tile_height < h) { fputs("/im_y 0 def\n", fd); - (void)sprintf(im_y, "%lu im_y sub", (unsigned long) h); + (void)snprintf(im_y, sizeof(im_y), "%lu im_y sub", (unsigned long) h); } } else { repeat_count = tf_numberstrips; @@ -1817,7 +1825,7 @@ PS_Lvl2ImageDict(FILE* fd, TIFF* tif, uint32 w, uint32 h) fprintf(fd, "/im_h %lu def\n", (unsigned long) tile_height); (void)strcpy(im_h, "im_h"); - (void)sprintf(im_y, "%lu im_y sub", (unsigned long) h); + (void)snprintf(im_y, sizeof(im_y), "%lu im_y sub", (unsigned long) h); } } diff --git a/tools/tiffcrop.c b/tools/tiffcrop.c index d00c912..6c53e74 100644 --- a/tools/tiffcrop.c +++ b/tools/tiffcrop.c @@ -1,4 +1,4 @@ -/* $Id: tiffcrop.c,v 1.3.2.15 2010-12-14 02:03:55 faxguy Exp $ */ +/* $Id: tiffcrop.c,v 1.3.2.16 2013-05-02 14:44:44 tgl Exp $ */ /* tiffcrop.c -- a port of tiffcp.c extended to include manipulations of * the image data through additional options listed below @@ -2077,7 +2077,7 @@ update_output_file (TIFF **tiffout, char *mode, int autoindex, return 1; } - sprintf (filenum, "-%03d%s", findex, export_ext); + snprintf(filenum, sizeof(filenum), "-%03d%s", findex, export_ext); filenum[14] = '\0'; strncat (exportname, filenum, 15); } @@ -2230,8 +2230,8 @@ main(int argc, char* argv[]) /* dump.infilename is guaranteed to be NUL termimated and have 20 bytes fewer than PATH_MAX */ - memset (temp_filename, '\0', PATH_MAX + 1); - sprintf (temp_filename, "%s-read-%03d.%s", dump.infilename, dump_images, + snprintf(temp_filename, sizeof(temp_filename), "%s-read-%03d.%s", + dump.infilename, dump_images, (dump.format == DUMP_TEXT) ? "txt" : "raw"); if ((dump.infile = fopen(temp_filename, dump.mode)) == NULL) { @@ -2249,8 +2249,8 @@ main(int argc, char* argv[]) /* dump.outfilename is guaranteed to be NUL termimated and have 20 bytes fewer than PATH_MAX */ - memset (temp_filename, '\0', PATH_MAX + 1); - sprintf (temp_filename, "%s-write-%03d.%s", dump.outfilename, dump_images, + snprintf(temp_filename, sizeof(temp_filename), "%s-write-%03d.%s", + dump.outfilename, dump_images, (dump.format == DUMP_TEXT) ? "txt" : "raw"); if ((dump.outfile = fopen(temp_filename, dump.mode)) == NULL) { diff --git a/tools/tiffdither.c b/tools/tiffdither.c index dee2a02..a0cb857 100644 --- a/tools/tiffdither.c +++ b/tools/tiffdither.c @@ -1,4 +1,4 @@ -/* $Id: tiffdither.c,v 1.9.2.1 2010-06-08 18:50:44 bfriesen Exp $ */ +/* $Id: tiffdither.c,v 1.9.2.2 2013-05-02 14:44:45 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -256,7 +256,7 @@ main(int argc, char* argv[]) TIFFSetField(out, TIFFTAG_FILLORDER, fillorder); else CopyField(TIFFTAG_FILLORDER, shortv); - sprintf(thing, "Dithered B&W version of %s", argv[optind]); + snprintf(thing, sizeof(thing), "Dithered B&W version of %s", argv[optind]); TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing); CopyField(TIFFTAG_PHOTOMETRIC, shortv); CopyField(TIFFTAG_ORIENTATION, shortv);