
Libpng 1.2.25 - February 18, 2008

This is a public release of libpng, intended for use in production codes.

Files available for download:

Source files with LF line endings (for Unix/Linux) and with a
"configure" script

   libpng-1.2.25.tar.gz
   libpng-1.2.25.tar.lzma
     (Get the lzma codec from <http://tukaani.org/lzma>).
   libpng-1.2.25.tar.bz2

Source files with LF line endings (for Unix/Linux) without the
"configure" script

   libpng-1.2.25-no-config.tar.gz
   libpng-1.2.25-no-config.tar.lzma
   libpng-1.2.25-no-config.tar.bz2

Source files with CRLF line endings (for Windows), without the
"configure" script

   lpng1225.zip
   lpng1225.7z
   lpng1225.tar.bz2

Project files

   libpng-1.2.25-project-netware.zip
   libpng-1.2.25-project-wince.zip

Other information:

   libpng-1.2.25-README.txt
   libpng-1.2.25-KNOWNBUGS.txt
   libpng-1.2.25-LICENSE.txt
   libpng-1.2.25-Y2K-compliance.txt
   libpng-1.2.25-1.2.24-diff.txt

Changes since the last public release (1.2.24):

version 1.2.25 [February 18, 2008]

  Fixed bug with unknown chunk handling, introduced in version 1.2.17
  Prevent gamma from being applied twice.
  Fixed some continue-after-malloc-failure errors in pngset.c (David Hill)
  Check for info_ptr == NULL in png_read_info() and png_process_data().
  Check for possible use of NULL user_png_ver[] in png_create_read_struct().
  Fix overflow of "msg" in png_decompres_chunk().
  Added libpng-1.2.25.tar.lzma to distribution.  Get the lzma codec
    from <http://tukaani.org/lzma>.
  Added lpng1225.7z to distribution.  Get the 7-zip decoder from
    from <http://www.7-zip.org>.
  Fixed some broken links in the README file.
  Refactored png_read_push_finish_row() slightly, trying to satisfy Coverity.
  Fixed potential NULL dereference of png_ptr in png_destroy_write_struct();
  clarified potential NULL dereference of png_ptr in png_destroy_read_struct();
  fixed potential NULL dereference of info_ptr in png_handle_bKGD();
  fixed potential NULL dereference of user_png_ver[] in
    png_create_write_struct_2(). (Coverity)

Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit 
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe) or to glennrp at users.sourceforge.net

Glenn R-P
