
OptiPNG - Revision history
==========================

Legend
------
++ Added or improved performance-related feature
   (might improve compression ratio or processing speed).
 + Added or improved feature.
 - Removed feature.
 ! Fixed bug.
!! Fixed critical bug
   (crash, data/metadata loss or security hazard).
 * Other modification (e.g. architectural improvement).

Version 0.7.4   21-oct-2012
-------------
!! Fixed the previous fix, which failed to fix the option -fix.
   (Thanks to Gynvael Coldwind and Mateusz Jurczyk for the report.)

Version 0.7.3   16-sep-2012
-------------
!! Fixed a use-after-free vulnerability in the palette reduction code.
   This vulnerability was accidentally introduced in version 0.7.

Version 0.7.2   24-aug-2012
-------------
 * Upgraded libpng to version 1.4.12.
 * Upgraded zlib to version 1.2.7-optipng.
 ! Fixed the display of huge (4GB+) file/IDAT sizes on 32-bit platforms.
 ! Issued a proper error message if the output IDAT can't fit in 2GB.
   Acknowledged this limitation in the user manual.
   (Thanks to John Sauter for the report.)
 ! Fixed the output file cleanup that should occur after a write error.
 * Added the option -debug and various undocumented debug features.
 * Moved the PNG reduction module (opngreduc) to a separate sub-project.

Version 0.7.1   19-mar-2012
-------------
!! Fixed a regression in the reduction of palette-encoded grayscale
   images.  This regression was introduced in version 0.7.
   (Thanks to Adam Ciarcinski for the fix.)

Version 0.7     29-feb-2012
-----------
 * Upgraded libpng to version 1.4.9.
 * Upgraded zlib to version 1.2.6-optipng.
!! Resolved a rarely-occurring out-of-bounds memory access error in
   Z_RLE, by upgrading zlib.  (Thanks to Christopher Wichura for the
   report, and thanks to Mark Adler for fixing zlib.)
 + Added the popularly-requested option -strip.
   The only suboption currently supported is "-strip all".
 + Added the option -clobber.
   (Thanks in part to Maciej Pilichowski for the contribution.)
 + Added the option -backup, as an alias of -keep.
 + Added the option -silent, as an alias of -quiet.
 - Deprecated the option -log.
 * Changed the activity display output from STDOUT to STDERR.
 + Allowed the option -preserve to save high-resolution timestamps
   on Unix, if the POSIX-1.2008 API is available.  This feature was
   previously available on Windows only.
 ! Fixed a minor precision error in the display of file size percents.
 ! Fixed a memory leak that occurred when reading broken GIF images.
 ! Fixed various build issues.
   (Thanks to Sebastian Pipping and Ville Skytta for the fixes.)
 * Resolved all remaining compatibility issues with libpng-1.5.
   (Thanks in part to Adam Ciarcinski for the contribution.)
 * Added build support for clang.
 * Reorganized the source directory structure.

Version 0.6.5   24-jan-2011
-------------
 * Upgraded libpng to version 1.4.5-optipng.
 * Upgraded zlib to version 1.2.5-optipng.
!! Fixed the I/O states (in libpng 1.4.5);
   they caused incorrect file reads in some rare cases.
   (Thanks to [M*A*S*H] and Dmitry Marakasov for the report.)
!! Fixed processing of PNG files with chunks of size 0.
   (Thanks to Matthew Fearnley for the report.)
 ! Fixed a display error in the TIFF import.
   (Thanks to Piotr Bandurski for the fix.)
 + Improved checking of the arguments of -f, -zc, -zm and -zs.
 - Removed quirks from the rangeset option argument syntax.
 ! Fixed a build issue under the system-supplied libpng-1.4.
   (Thanks to Petr Gajdos for the fix.)
 * Resolved forward-compatibility issues regarding libpng-1.5;
   however, the system-supplied libpng-1.5 is not yet supported.
 * Added various enhancements to the configure+make build system.
   (Thanks in part to Elias Pipping and Dmitri Zubko.)

Version 0.6.4   14-mar-2010
-------------
 * Upgraded libpng to version 1.4.1-optipng.
 * Upgraded zlib to version 1.2.4-optipng.
 + Added the option -nx.
 * Clarified the behavior of -nz and the relation between -nz and -o0.
 + Added a filesystem check (resolving normalized paths, symlinks, etc.)
   to better detect when the output overwrites the input.
 + Enabled automatic wildcard expansion (i.e. globbing) on Win64.
 ! Fixed a Unicode build issue on Windows.
   (Thanks to Fabien Barbier for the fix.)

Version 0.6.3   18-may-2009
-------------
 * Upgraded libpng to version 1.2.36-optipng.
!! Fixed a use-after-free error in the GIF reader.
   (Thanks to Roy Tam for the report, and to Bryan McQuade for the fix.)
 ! Flushed the output log to display the current trial in real time.
   This only worked on Windows in the previous version.
   (Thanks to Vincent Lefevre for the fix.)
 ! Fixed an error in reporting unrecognized file formats.
   (Thanks to [LaughingMan] for the report.)
 - Removed the requirement to "fix" TIFF files that contain unrecognized
   metadata.  (Thanks to Piotr Bandurski for the suggestion.)
 * Simplified the option abbreviation rules.  Option names can now be
   abbreviated to their shortest unique prefix, as in X11 applications.

Version 0.6.2    9-nov-2008
-------------
 * Upgraded libpng to version 1.2.33-optipng.
++ Put back a speed optimization, accidentally removed in version 0.6,
   allowing singleton trials (-o1) to be bypassed in certain conditions.
!! Fixed an array overflow in the BMP reader.
!! Fixed the loss of private chunks under the -snip option.
 + Produced a more concise on-screen output in the non-verbose mode.
   (Thanks to Vincent Lefevre for the contribution.)
 * Added a programming interface to the optimization engine, in order
   to facilitate the development of PNG-optimizing GUI apps and plugins.

Version 0.6.1   20-jul-2008
-------------
 * Upgraded cexcept to version 2.0.1.
 + Added a configure script, to be used instead of unix-secure.mak.
 ! Fixed a build issue that occurred when using libpng from the system.
   (Thanks to Nelson A. de Oliveira for the report.)
 ! Fixed processing when image reduction yields an output larger than
   the original.  (Thanks to Michael Krishtopa for the report.)
 ! Fixed behavior of -preserve.
   (Thanks to Bill Koch for the report.)
 - Removed displaying of partial progress when abandoning IDATs under
   the -v option.  The percentages displayed were not very accurate.

Version 0.6     15-jun-2008
-----------
 * Upgraded libpng to version 1.2.29-optipng.
++ Implemented grayscale(alpha)-to-palette reductions.
++ Improved conversion of bKGD info during RGB-to-palette reductions.
   (Thanks to Matthew Fearnley for the contribution.)
!! Fixed conversion of bKGD and tRNS during 16-to-8-bit reductions.
   (Thanks to Matthew Fearnley for the report.)
 + Added support for compressed BMP (incl. PNG-compressed BMP, you bet!)
 + Improved the speed of reading raw PNM files.
 + Recognized PNG digital signatures (dSIG) and disabled optimization
   in their presence, to preserve their integrity.
 + Allowed the user to enforce the optimization of dSIG'ed files.
 + Recognized APNG animation files and disabled reductions to preserve
   their integrity.
 + Added the -snip option, to allow the user to "snip" one image out of
   a multi-image file, such as animated GIF, multi-page TIFF, or APNG.
   (Thanks to [LaughingMan] for the suggestion.)
 + Improved recovery of PNG files with incomplete IDAT.
!! Fixed a crash triggered by the use of -log on some platforms.
   (Thanks to Stefan Bruns for the fix.)
 ! Fixed behavior of -out and -dir when the input is already optimized.
   (Thanks to Christian Davideck for the report.)
 * Provided more detailed image information at the start of processing.
 * Provided a more detailed summary at the end of processing, under the
   presence of the -v option and/or the occurrence of exceptional events.

Version 0.5.5   28-jan-2007
-------------
 * Upgraded libpng to version 1.2.15-optipng.
++ Used a previously-missed RGB-to-palette reduction opportunity
   for images containing 256 distinct colors.
   (Thanks to Joachim Kluge for the report.)
!! Fixed conversion of bKGD info during RGB-to-palette reductions.
   (Thanks to Matthew Fearnley for the report.)
 ! Fixed pre-computation of iterations.
   (Thanks to Matthew Fearnley for the report.)
 ! Eliminated a false alarm when processing RGB images with tRNS
   in Unix-secure mode.  (Thanks to Till Maas for the report, and
   thanks to Nelson A. de Oliveira for the fix.)
 ! Fixed behavior of -out and -dir when changing interlacing.
   (Thanks to Martin Packman for the report.)
 ! Fixed the behavior of "-dir [DRIVE]:" on Windows.

Version 0.5.4   11-aug-2006
-------------
 + Added user options -out and -dir, to specify the name of
   the output file or directory.
   (Thanks to Alexander Lucas for the suggestion.)
 * Added support for builds based on the system-supplied libpng.
   (Thanks to Nelson A. de Oliveira for the valuable help.)

Version 0.5.3   23-jul-2006
-------------
 * Upgraded libpng to version 1.2.12-optipng.
 + Implemented basic support for TIFF (grayscale, RGB and RGBA,
   uncompressed).
++ Avoided the redundant trial when the search space is singular
   (e.g. when running "optipng -o1 example.tif").
 + Prevented accidental file corruption when using option "-log".
 ! Fixed (again) a small typo in the online help.

Version 0.5.2    7-may-2006
-------------
 + Improved handling of inexact PNM-to-PNG conversions.
 ! Fixed a typo that was breaking the build on some Unix platforms.
   (Thanks to Aaron Reitz for the report.)

Version 0.5.1   30-apr-2006
-------------
++ Implemented bit depth reduction for palette images.
 * Upgraded libpng to version 1.2.10-optipng.
 + Improved the BMP support.
 + Added a Unix man page.
   (Thanks to Nelson A. de Oliveira for the contribution.)
 + Allowed abbreviation of command-line options.
 + Changed user option -log to accept a file name as an argument.
 * Changed user option -no to -simulate.
 ! Fixed an error in handling .bak files on Unix.
   (Thanks to Adam Szojda and Nelson A. de Oliveira for the report.)
 ! Fixed a small typo in the help screen.
   (Thanks to A. Costa and Nelson A. de Oliveira for the report.)

Version 0.5     14-jan-2006
-----------
++ Added pngxtern, a libpng add-on for external image format
   support: BMP (uncompressed), GIF, PNM.
   (This was incorporated from OptiPNG-Plus.)
++ Implemented RGB(A)-to-palette reductions.
 * Upgraded zlib to version 1.2.3-optipng.
 * Upgraded libpng to version 1.2.8-optipng.
 + If trials are ended prematurely, detailed progression is only
   reported under the user option -v.
 - Removed reporting of some IDAT sizes that exceeded the optimum.
   (This was NOT a bug, but a "feature" that confused some users.)
 ! Fixed an RGB-to-gray reduction problem that occurred under some
   specific background colors.
 * Added support for builds based on the system-supplied zlib.
   (Thanks to Nelson A. de Oliveira for the suggestion.)
 * Modified LICENSE.  It is now a verbatim spell of the zlib license.

Version 0.4.8   10-may-2005
-------------
 * Upgraded libpng to version 1.0.18-optipng.
!! Fixed a palette-to-gray reduction problem that occurred when an
   RGB triple had both an alpha below max, and an alpha equal to max.
   (Thanks to Nicolas Le Gland for the report.)
 + Packed the Windows executable using UPX.
   (Thanks to [Warriant] for the suggestion.)

Version 0.4.7   30-oct-2004
-------------
!! Fixed a palette-to-gray reduction problem that occurred when
   having more than one alpha value per RGB triple.
   (Thanks to Larry Hastings for the report.)
 ! Fixed the progress display, when processing very large images.
 + Displayed the image info at the beginning of processing.
++ Reduced the IDAT buffer size, allowing abandoned trials to
   terminate earlier in some circumstances.
 + Implemented error recovery, when PLTE is too small, and/or
   tRNS is too large.

Version 0.4.6   25-oct-2004
-------------
 * Upgraded zlib to version 1.2.2-optipng.
 * Upgraded libpng to version 1.0.17-optipng.
   This provides safe handling of some ill-formed PNG images.
 + Rewrote makefiles.
 + Added project workspace to build under Visual C++ 6.0,
   integrated with memory leak detection.
++ Implemented a premature termination of trials, in the moment
   when IDAT grows beyond the smallest size previously achieved.
   (Thanks to Larry Hastings for the idea.)
 + Changed the order of trials, to perform the trials that are
   more likely to yield a smaller IDAT, at the beginning.
 + Added user option -full to avoid the premature termination of
   trials; useful for debugging.

Version 0.4.5   31-may-2004
-------------
 * Upgraded zlib to version 1.2.1.f-cos2.
 * Upgraded libpng to version 1.0.15-cos2.
 * Changed user option -nx to -nz.
 + Added user option to preserve file attributes (file mode,
   time stamp, etc.) when applicable.
   (Thanks to Nehal Mistry for the suggestion.)
 ! Fixed an incorrect initialization of zlib window bits.
 ! Displayed an error message when the search space was invalid.
!! Fixed a palette reduction problem for bit depths below 8.
 ! Eliminated memory leaks.
   (Thanks to Niels de Koning for the help.)

Version 0.4.4   20-nov-2003
-------------
 * Upgraded zlib to version 1.2.1
++ Added support for the Z_RLE strategy.

Version 0.4.3   12-aug-2003
-------------
 ! Fixed a reduction problem that caused an assertion failure.
   (Thanks to Dimitri Papadopoulos for the report.)

Version 0.4.2   30-jun-2003
-------------
++ Enhanced the support for palette size reductions:
   trailing sterile palette entries are removed even when
   the bit depth is below 8.
 ! Enforced recompression when the new IDAT has the same size,
   but other chunks have been reduced.
 + Displayed the IDAT size difference as a percentage.
   (Thanks to Nehal Mistry for the suggestion.)

Version 0.4.1   19-may-2003
-------------
 ! Fixed the removal of trailing sterile palette entries.

Version 0.4     12-may-2003
-----------
++ Added support for palette-to-gray reductions.
++ Added partial support for palette size reductions.
 ! Fixed the reporting of invalid command-line options.
 ! Eliminated a spurious warning when the zlib window size
   is set to 256.

Version 0.3.2   11-mar-2003
-------------
 + Added support for updating sBIT during reductions.
 ! Fixed the reduction of the alpha channel.

Version 0.3.1   25-feb-2003
-------------
 ! Fixed the encoding of interlaced images when they become
   larger than the input.
   (Thanks to James H. Cloos, Jr. for the report.)
 + Added the HISTORY document (this file).

Version 0.3     24-feb-2003
-----------
This is the first public release of OptiPNG.
++ Added support for iterating through zlib memory levels.
++ Added support for collapsing IDAT, avoiding calls to
   png_set_compression_buffer_size().
   This reduces the memory requirements.
++ Added support for lossless reduction of the image type:
   RGB[A] -> G[A], RGBA -> RGB, GA -> G
 + Added many user options.
 + Added documentation.

Version 0.2     27-dec-2001
-----------
 + Added support for optimization level presets.
 + Added user option for changing the interlacing.

Version 0.1     17-dec-2001
-----------
 + Added support for chunk I/O status annotation.
   This improves the speed of OptiPNG significantly.
 * Structured exception handling is provided by cexcept.

Version 0.0.1   10-dec-2001
-------------
This is the very first version of OptiPNG.
It compresses IDAT repeatedly, iterating through zlib compression
and strategy levels, and PNG filters.

