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.8 2023-nov-03 ------------- * Upgraded libpng to version 1.6.40. * Upgraded zlib to version 1.3-optipng. * Upgraded cexcept to version 2.0.2-optipng. !! Fixed a global-buffer-overflow vulnerability in the GIF reader. [Reported by Zeng Yunxiang; fixed by Thomas Hurst] ! Fixed a stack-print-after-scope defect in the error handler. ! Fixed an assertion failure in the image reduction module. ! Fixed the command-line wildargs expansion in the Windows port. * Raised the minimum required libpng version from 1.2.9 to 1.6.35. * Raised the minimum required zlib version from 1.2.1 to 1.2.8. * Refactored the structured exception handling. Version 0.7.7 2017-dec-27 ------------- * Upgraded libpng to version 1.6.34. * Upgraded zlib to version 1.2.11-optipng. * Upgraded minitiff to version 0.2. !! Fixed a buffer overflow vulnerability in the GIF decoder. [Reported by Joonun Jang] !! Fixed an integer overflow vulnerability in the TIFF decoder. [Reported by Jaeseung Choi] ! Fixed the build on macOS High Sierra. [Reported by various users] [Fixed by Yuen Ho Wong and Friedrich Preuss] ! Fixed the build on DJGPP. * Disallowed out-of-bounds values in rangeset options. Version 0.7.6 2016-apr-03 [Released by Ramona C. Truta] ------------- * Upgraded libpng to version 1.6.21. ! Fixed an assertion failure in the image reduction code. [Fixed by upgrading libpng] !! Fixed various security-sensitive defects in the BMP decoder. [Reported by Henri Salo and Hans Jerry Illikainen] [Fixed by Ramona C. Truta] ! Fixed a benign uninitialized memory read in the GIF decoder. [Reported by Gustavo Grieco] ! Fixed a build failure occurring under the Estonian (et_EE) locale. [Reported by Sebastian Pipping] [Fixed by Priit Laes] ! Fixed a build failure occurring on Mac OS X, FreeBSD, and possibly other systems that lack POSIX-compliant high-resolution timestamps. [Reported by Ryan Schmidt and Dmitry Egorov] [Contributed by Sebastian Pipping] ! Fixed a typo causing build failures in 32-bit ANSI C compilation. [Reported by various users] Version 0.7.5 2014-mar-24 ------------- * Upgraded libpng to version 1.6.10-optipng. * Upgraded zlib to version 1.2.8-optipng. ! Fixed various build issues with libpng-1.5 and libpng-1.6. [Fixed by Oliver Schneider] * Allowed the handling of huge image files (> millions of pixels per row or column) to be independent of the libpng version. + Allowed the option -preserve to save the file ownership (UID/GID) on Unix. [Requested by Otto Kekäläinen] ! Fixed a build issue with Clang. + Added various enhancements to the configure script. Version 0.7.4 2012-oct-21 ------------- !! Fixed the previous fix, which failed to fix the option -fix. [Reported by Gynvael Coldwind and Mateusz Jurczyk] Version 0.7.3 2012-sep-16 ------------- !! Fixed a use-after-free vulnerability in the palette reduction code. This vulnerability was accidentally introduced in version 0.7. Version 0.7.2 2012-aug-24 ------------- * 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. [Reported by John Sauter] ! 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 2012-mar-19 [Released by Ramona C. Truta] ------------- !! Fixed a regression in the reduction of palette-encoded grayscale images. (This regression was introduced in version 0.7.) [Fixed by Adam Ciarcinski] Version 0.7 2012-feb-29 [Released by Cosmin & Ramona C. Truta] ----------- * Upgraded libpng to version 1.4.9. * Upgraded zlib to version 1.2.6-optipng. !! Fixed a rarely-occurring out-of-bounds memory access error in the Z_RLE strategy in zlib. [Reported by Christopher Wichura] [Fixed by upgrading zlib] + Added the popularly-requested option -strip. The only suboption currently supported is "-strip all". + Added the option -clobber. [Contributed by Maciej Pilichowski] + Added the option -backup, as an alias of -keep. [Contributed by Ramona C. Truta] + Added the option -silent, as an alias of -quiet. [Contributed by Ramona C. Truta] - Deprecated the option -log. [Contributed by Ramona C. Truta] * 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. [Fixed by Sebastian Pipping and Ville Skyttä] * Resolved all remaining compatibility issues with libpng-1.5. [Contributed by Adam Ciarcinski] * Added build support for clang. * Reorganized the source directory structure. Version 0.6.5 2011-jan-24 ------------- * 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. [Reported by Dmitry Marakasov] !! Fixed processing of PNG files with chunks of size 0. [Reported by Matthew Fearnley] ! Fixed a display error in the TIFF import. [Fixed by Piotr Bandurski] + 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. [Fixed by Petr Gajdos] * 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. [Contributed by Elias Pipping and Dmitri Zubko] Version 0.6.4 2010-mar-14 ------------- * Upgraded libpng to version 1.4.1-optipng. * Upgraded zlib to version 1.2.4-optipng. + Added the option -nx. * Clarified the behavior of the option -nz and the relationship between the options -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. [Fixed by Fabien Barbier] Version 0.6.3 2009-may-18 ------------- * Upgraded libpng to version 1.2.36-optipng. !! Fixed a use-after-free error in the GIF reader. [Reported by Roy Tam] [Fixed by Bryan McQuade] ! Flushed the output log to display the current trial in real time. This only worked on Windows in the previous version. [Fixed by Vincent Lefèvre] ! Fixed an error in reporting unrecognized file formats. - Removed the requirement to "fix" TIFF files that contain unrecognized metadata. [Requested by Piotr Bandurski] * Simplified the option abbreviation rules. Option names can now be abbreviated to their shortest unique prefix, as in X11 applications. Version 0.6.2 2008-nov-09 ------------- * 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 option -snip. + Produced a more concise on-screen output in the non-verbose mode. [Contributed by Vincent Lefèvre] * 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 2008-jul-20 ------------- * 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. [Reported by Nelson A. de Oliveira] ! Fixed the processing when the image reduction yields an output larger than the original. [Reported by Michael Krishtopa] ! Fixed the behavior of the option -preserve. [Reported by Bill Koch] - Removed displaying of partial progress when abandoning IDATs under the option -v. (The percentages displayed were not very accurate.) Version 0.6 2008-jun-15 ----------- * Upgraded libpng to version 1.2.29-optipng. ++ Implemented grayscale(alpha)-to-palette reductions. ++ Improved conversion of bKGD info during RGB-to-palette reductions. [Contributed by Matthew Fearnley] !! Fixed conversion of bKGD and tRNS during 16-to-8-bit reductions. [Reported by Matthew Fearnley] + 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 option -snip, to allow the user to snip one image out of a multi-image file, such as animated GIF, multi-page TIFF, or APNG. + Improved recovery of PNG files with incomplete IDAT. !! Fixed a crash triggered by the use of -log on some platforms. [Fixed by Stefan Brüns] ! Fixed the behavior of the options -out and -dir when the input is already optimized. [Reported by Christian Davideck] * 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 option -v and/or the occurrence of exceptional events. Version 0.5.5 2007-jan-28 ------------- * Upgraded libpng to version 1.2.15-optipng. ++ Used a previously-missed RGB-to-palette reduction opportunity for images containing 256 distinct colors. [Reported by Joachim Kluge] !! Fixed conversion of bKGD info during RGB-to-palette reductions. [Reported by Matthew Fearnley] ! Fixed pre-computation of iterations. [Reported by Matthew Fearnley] ! Eliminated a false alarm when processing RGB images with tRNS in Unix-secure mode. [Reported by Till Maas] [Fixed by Nelson A. de Oliveira] ! Fixed the behavior of the options -out and -dir when changing interlacing. [Reported by Martin Packman] ! Fixed the behavior of "-dir [DRIVE]:" on Windows. Version 0.5.4 2006-aug-11 ------------- + Added the options -out and -dir, to specify the name of the output file or directory. [Requested by Alexander Lucas] * Added support for builds based on the system-supplied libpng. [Contributed by Nelson A. de Oliveira] Version 0.5.3 2006-jul-23 ------------- * 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 the option -log. ! Fixed (again) a small typo in the online help. Version 0.5.2 2006-may-07 ------------- + Improved handling of inexact PNM-to-PNG conversions. ! Fixed a typo that was breaking the build on some Unix platforms. [Reported by Aaron Reitz] Version 0.5.1 2006-apr-30 ------------- ++ Implemented bit depth reduction for palette images. * Upgraded libpng to version 1.2.10-optipng. + Improved the BMP support. + Added a Unix man page. [Contributed by Nelson A. de Oliveira] + Allowed abbreviation of command-line options. + Changed the option -log to accept a file name as an argument. * Renamed the option -no to -simulate. ! Fixed an error in handling .bak files on Unix. [Reported by Adam Szojda and Nelson A. de Oliveira] ! Fixed a small typo in the help screen. [Reported by A. Costa and Nelson A. de Oliveira] Version 0.5 2006-jan-14 ----------- ++ Added pngxtern, a libpng add-on for external image format support: BMP (uncompressed), GIF, PNM. ++ 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 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. [Requested by Nelson A. de Oliveira] * Modified LICENSE. It is now a verbatim spell of the zlib license. Version 0.4.8 2005-may-10 ------------- * 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. [Reported by Nicolas Le Gland] + Packed the Windows executable using UPX. Version 0.4.7 2004-oct-30 ------------- !! Fixed a palette-to-gray reduction problem that occurred when having more than one alpha value per RGB triple. [Reported by Larry Hastings] ! 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 2004-oct-25 ------------- * 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. [Requested by Larry Hastings] + Changed the order of trials, to perform the trials that are more likely to yield a smaller IDAT, at the beginning. + Added the option -full to avoid the premature termination of trials; useful for debugging. Version 0.4.5 2004-may-31 ------------- * Upgraded zlib to version 1.2.1.f-cos2. * Upgraded libpng to version 1.0.15-cos2. * Renamed the option -nx to -nz. + Added the option -preserve to preserve file attributes (file mode, time stamp, etc.) where applicable. [Requested by Nehal Mistry] ! 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. [Contributed by Niels de Koning] Version 0.4.4 2003-nov-20 ------------- * Upgraded zlib to version 1.2.1. ++ Added support for the Z_RLE strategy. Version 0.4.3 2003-aug-12 ------------- ! Fixed a reduction problem that caused an assertion failure. [Reported by Dimitri Papadopoulos] Version 0.4.2 2003-jun-30 ------------- ++ 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. [Requested by Nehal Mistry] Version 0.4.1 2003-may-19 ------------- ! Fixed the removal of trailing sterile palette entries. Version 0.4 2003-may-12 ----------- ++ 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 2003-mar-11 ------------- + Added support for updating sBIT during reductions. ! Fixed the reduction of the alpha channel. Version 0.3.1 2003-feb-25 ------------- ! Fixed the encoding of interlaced images when they become larger than the input. [Reported by James H. Cloos, Jr.] + Added the HISTORY document (this file). Version 0.3 2003-feb-24 ----------- * Announced 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 2001-dec-27 ----------- + Added support for optimization level presets. + Added a user option for changing the interlacing. Version 0.1 2001-dec-17 ----------- + Added support for chunk I/O status annotation. This improves the speed of OptiPNG significantly. * Added structured exception handling via cexcept. Version 0.0.1 2001-dec-10 ------------- * Introduced OptiPNG. ++ Compressed PNG IDAT data repeatedly, iterating through zlib compression and strategy levels, as well as PNG delta filters.