
Libpng 1.2.44beta02 - June 19, 2010

This is not intended to be a public release.  It will be replaced
within a few weeks by a public version or by another test version.

Files available for download:

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

   libpng-1.2.44beta02.tar.xz (LZMA-compressed, recommended)
   libpng-1.2.44beta02.tar.gz
   libpng-1.2.44beta02.tar.bz2

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

   libpng-1.2.44beta02-no-config.tar.xz (LZMA-compressed, recommended)
   libpng-1.2.44beta02-no-config.tar.gz
   libpng-1.2.44beta02-no-config.tar.bz2

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

   lp1244b02.zip
   lp1244b02.7z
   lp1244b02.tar.bz2

Project files

   libpng-1.2.44beta02-project-netware.zip
   libpng-1.2.44beta02-project-wince.zip

Other information:

   libpng-1.2.44beta02-README.txt
   libpng-1.2.44beta02-KNOWNBUGS.txt
   libpng-1.2.44beta02-LICENSE.txt
   libpng-1.2.44beta02-Y2K-compliance.txt
   libpng-1.2.44beta02-[previous version]-diff.txt

Changes since the last public release (1.2.42):

version 1.2.43beta01 [January 27, 2010]
  Updated CMakeLists.txt for consistent indentation and to avoid an
    unclosed if-statement warning (Philip Lowman).
  Removed "#ifdef PNG_1_0_X / #endif" surrounding
    PNG_READ_16_TO_8_SUPPORTED and PNG_READ_GRAY_TO_RGB_SUPPORTED
    in pngconf.h.  These were added in libpng-1.2.41beta08 and libpng-1.0.51,
    which introduced a binary incompatibility with libpng-1.0.50.
  Backported new png_decompress_chunk() algorithm from libpng-1.4.1

version 1.2.43beta02 [February 1, 2010]
  Backported two-pass png_decompress_chunk() algorithm from libpng-1.4.1

version 1.2.43beta03 [February 6, 2010]
  Backported fast png_push_save_buffer() algorithm from libpng-1.4.1

version 1.2.43beta04 [February 8, 2010]
  Reverted recent changes to png_push_save-buffer().
  Removed PNGAPI declaration of png_calloc() and png_write_sig() in
    1ibpng-1.2.X, introduced by mistake in libpng-1.2.41.
  Return allocated "old_buffer" in png_push_save_buffer() before png_error(),
    to avoid a potential memory leak.

version 1.2.43beta05 [February 8, 2010]
  Ported rewritten png_decompress_chunk() by John Bowler from libpng-1.4.1.

version 1.0.53rc01 and 1.2.43rc01 [February 18, 2010]
  No changes.

version 1.0.53rc02 and 1.2.43rc02 [February 19, 2010]
  Define _ALL_SOURCE in configure.ac, makefile.aix, and CMakeLists.txt
    when using AIX compiler.

version 1.0.53 and 1.2.43 [February 25, 2010]
  Removed unused gzio.c from contrib/pngminim gather and makefile scripts

version 1.2.44beta01 [June 18, 2010]
  In pngpread.c: png_push_have_row() add check for new_row > height
  Removed the now-redundant check for out-of-bounds new_row from example.c

version 1.2.44beta02 [June 19, 2010]
  In pngpread.c: png_push_process_row() add check for too many rows.
  Removed the now-redundant check for new_row > height in png_push_have_row().

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
