#if 0
CHANGES - changes for libpng

version 0.1 [March 29, 1995]
  initial work-in-progress release

version 0.2 [April 1, 1995]
  added reader into png.h
  fixed small problems in stub file

version 0.3 [April 8, 1995]
  added pull reader
  split up pngwrite.c to several files
  added pnglib.txt
  added example.c
  cleaned up writer, adding a few new transformations
  fixed some bugs in writer
  interfaced with zlib 0.5
  added K&R support
  added check for 64 KB blocks for 16 bit machines

version 0.4 [April 26, 1995]
  cleaned up code and commented code
  simplified time handling into png_time
  created png_color_16 and png_color_8 to handle color needs
  cleaned up color type defines
  fixed various bugs
  made various names more consistent
  interfaced with zlib 0.71
  cleaned up zTXt reader and writer (using zlib's Reset functions)
  split transformations into pngrtran.c and pngwtran.c

version 0.5 [April 30, 1995]
  interfaced with zlib 0.8
  fixed many reading and writing bugs
  saved using 3 spaces instead of tabs

version 0.6 [May 1, 1995]
  first beta release
  added png_large_malloc() and png_large_free()
  added png_size_t
  cleaned up some compiler warnings
  added png_start_read_image()

version 0.7 [June 24, 1995]
  cleaned up lots of bugs
  finished dithering and other stuff
  added test program
  changed name from pnglib to libpng

version 0.71 [June 26, 1995]
  changed pngtest.png for zlib 0.93
  fixed error in libpng.txt and example.c

version 0.8 [August 20, 1995]
  cleaned up some bugs
  added png_set_filler()
  split up pngstub.c into pngmem.c, pngio.c, and pngerror.c
  added #define's to remove unwanted code
  moved png_info_init() to png.c
  added old_size into png_realloc()
  added functions to manually set filtering and compression info
  changed compression parameters based on image type
  optimized filter selection code
  added version info
  changed external functions passing floats to doubles (k&r problems?)
  put all the configurable stuff in pngconf.h
  enabled png_set_shift to work with paletted images on read
  added png_read_update_info() - updates info structure with transformations

Version 0.81 [August, 1995]
  incorporated Tim Wegner's medium model code (thanks, Tim)

Version 0.82 [September, 1995]
  [unspecified changes]

Version 0.85 [December, 1995]
  added more medium model code (almost everything's a far)
  added i/o, error, and memory callback functions
  fixed some bugs (16-bit, 4-bit interlaced, etc.)
  added first run progressive reader (barely tested)

Version 0.86 [January, 1996]
  fixed bugs
  improved documentation

Version 0.87 [January, 1996]
  fixed medium model bugs
  fixed other bugs introduced in 0.85 and 0.86
  added some minor documentation

Version 0.88 [January, 1996]
  fixed progressive bugs
  replaced tabs with spaces
  cleaned up documentation
  added callbacks for read/write and warning/error functions

Version 0.89 [July, 1996]
  Added new initialization API to make libpng work better with shared libs
    we now have png_create_read_struct(), png_create_write_struct(),
    png_create_info_struct(), png_destroy_read_struct(), and
    png_destroy_write_struct() instead of the separate calls to
    malloc and png_read_init(), png_info_init(), and png_write_init()
  Changed warning/error callback functions to fix bug - this means you
    should use the new initialization API if you were using the old
    png_set_message_fn() calls, and that the old API no longer exists
    so that people are aware that they need to change their code
  Changed filter selection API to allow selection of multiple filters
    since it didn't work in previous versions of libpng anyways
  Optimized filter selection code
  Fixed png_set_background() to allow using an arbitrary RGB color for
    paletted images
  Fixed gamma and background correction for paletted images, so
    png_correct_palette is not needed unless you are correcting an
    external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED
    in pngconf.h) - if nobody uses this, it may disappear in the future.
  Fixed bug with Borland 64K memory allocation (Alexander Lehmann)
  Fixed bug in interlace handling (Smarasderagd, I think)
  Added more error checking for writing and image to reduce invalid files
  Separated read and write functions so that they won't both be linked
    into a binary when only reading or writing functionality is used
  New pngtest image also has interlacing and zTXt
  Updated documentation to reflect new API

Version 0.90 [January, 1997]
  Made CRC errors/warnings on critical and ancillary chunks configurable
  libpng will use the zlib CRC routines by (compile-time) default
  Changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner)
  Added external C++ wrapper statements to png.h (Gilles Dauphin)
  Allow PNG file to be read when some or all of file signature has already
    been read from the beginning of the stream.  ****This affects the size
    of info_struct and invalidates all programs that use a shared libpng****
  Fixed png_filler() declarations
  Fixed? background color conversions
  Fixed order of error function pointers to match documentation
  Current chunk name is now available in png_struct to reduce the number
    of nearly identical error messages (will simplify multi-lingual
    support when available)
  Try to get ready for unknown-chunk callback functions:
    - previously read critical chunks are flagged, so the chunk handling
      routines can determine if the chunk is in the right place
    - all chunk handling routines have the same prototypes, so we will
      be able to handle all chunks via a callback mechanism
  Try to fix Linux "setjmp" buffer size problems
  Removed png_large_malloc, png_large_free, and png_realloc functions.

Version 0.95 [March, 1997]
  Fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never
  Fixed bug in PNG file signature compares when start != 0
  Changed parameter type of png_set_filler(...filler...) from png_byte
    to png_uint_32
  Added test for MACOS to ensure that both math.h and fp.h are not #included
  Added macros for libpng to be compiled as a Windows DLL (Andreas Kupries)
  Added "packswap" transformation, which changes the endianness of
    packed-pixel bytes (Kevin Bracey)
  Added "strip_alpha" transformation, which removes the alpha channel of
    input images without using it (not necessarily a good idea)
  Added "swap_alpha" transformation, which puts the alpha channel in front
    of the color bytes instead of after
  Removed all implicit variable tests which assume NULL == 0 (I think)
  Changed several variables to "png_size_t" to show 16/32-bit limitations
  Added new pCAL chunk read/write support
  Added experimental filter selection weighting (Greg Roelofs)
  Removed old png_set_rgbx() and png_set_xrgb() functions that have been
    obsolete for about 2 years now (use png_set_filler() instead)
  Added macros to read 16- and 32-bit ints directly from buffer, to be
    used only on those systems that support it (namely PowerPC and 680x0)
    With some testing, this may become the default for MACOS/PPC systems.
  Only calculate CRC on data if we are going to use it
  Added macros for zTXt compression type PNG_zTXt_COMPRESSION_???
  Added macros for simple libpng debugging output selectable at compile time
  Removed PNG_READ_END_MODE in progressive reader (Smarasderagd)
  More description of info_struct in libpng.txt and png.h
  More instructions in example.c
  More chunk types tested in pngtest.c
  Renamed pngrcb.c to pngset.c, and all png_read_<chunk> functions to be
    png_set_<chunk>.  We now have corresponding png_get_<chunk>
    functions in pngget.c to get information in info_ptr.  This isolates
    the application from the internal organization of png_info_struct
    (good for shared library implementations).

Version 0.96 [May, 1997]
  Fixed serious bug with < 8bpp images introduced in 0.95
  Fixed 256-color transparency bug (Greg Roelofs)
  Fixed up documentation (Greg Roelofs, Laszlo Nyul)
  Fixed "error" in pngconf.h for Linux setjmp() behavior
  Fixed DOS medium model support (Tim Wegner)
  Fixed png_check_keyword() for case with error in static string text
  Added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul)
  Added typecasts to quiet compiler errors
  Added more debugging info

Version 0.97 [January, 1998]
  Removed PNG_USE_OWN_CRC capability
  Relocated png_set_crc_action from pngrutil.c to pngrtran.c
  Fixed typecasts of "new_key", etc. (Andreas Dilger)
  Added RFC 1152 [sic] date support
  Fixed bug in gamma handling of 4-bit grayscale
  Added 2-bit grayscale gamma handling (Glenn R-P)
  Added more typecasts. 65536L becomes (png_uint_32)65536L, etc. (Glenn R-P)
  Minor corrections in libpng.txt
  Added simple sRGB support (Glenn R-P)
  Easier conditional compiling, e.g.,
    define PNG_READ/WRITE_NOT_FULLY_SUPPORTED;
    all configurable options can be selected from command-line instead
    of having to edit pngconf.h (Glenn R-P)
  Fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P)
  Added more conditions for png_do_background, to avoid changing
    black pixels to background when a background is supplied and
    no pixels are transparent
  Repaired PNG_NO_STDIO behavior
  Tested NODIV support and made it default behavior (Greg Roelofs)
  Added "-m" option and PNGTEST_DEBUG_MEMORY to pngtest (John Bowler)
  Regularized version numbering scheme and bumped shared-library major
    version number to 2 to avoid problems with libpng 0.89 apps
    (Greg Roelofs)

Version 0.98 [January, 1998]
  Cleaned up some typos in libpng.txt and in code documentation
  Fixed memory leaks in pCAL chunk processing (Glenn R-P and John Bowler)
  Cosmetic change "display_gamma" to "screen_gamma" in pngrtran.c
  Changed recommendation about file_gamma for PC images to .51 from .45,
    in example.c and libpng.txt, added comments to distinguish between
    screen_gamma, viewing_gamma, and display_gamma.
  Changed all references to RFC1152 to read RFC1123 and changed the
    PNG_TIME_RFC1152_SUPPORTED macro to PNG_TIME_RFC1123_SUPPORTED
  Added png_invert_alpha capability (Glenn R-P -- suggestion by Jon Vincent)
  Changed srgb_intent from png_byte to int to avoid compiler bugs

Version 0.99 [January 30, 1998]
  Free info_ptr->text instead of end_info_ptr->text in pngread.c (John Bowler)
  Fixed a longstanding "packswap" bug in pngtrans.c
  Fixed some inconsistencies in pngconf.h that prevented compiling with
    PNG_READ_GAMMA_SUPPORTED and PNG_READ_hIST_SUPPORTED undefined
  Fixed some typos and made other minor rearrangement of libpng.txt (Andreas)
  Changed recommendation about file_gamma for PC images to .50 from .51 in
    example.c and libpng.txt, and changed file_gamma for sRGB images to .45
  Added a number of functions to access information from the png structure
    png_get_image_height(), etc. (Glenn R-P, suggestion by Brad Pettit)
  Added TARGET_MACOS similar to zlib-1.0.8
  Define PNG_ALWAYS_EXTERN when __MWERKS__ && WIN32 are defined
  Added type casting to all png_malloc() function calls

Version 0.99a [January 31, 1998]
  Added type casts and parentheses to all returns that return a value.(Tim W.)

Version 0.99b [February 4, 1998]
  Added type cast png_uint_32 on malloc function calls where needed.
  Changed type of num_hist from png_uint_32 to int (same as num_palette).
  Added checks for rowbytes overflow, in case png_size_t is less than 32 bits.
  Renamed makefile.elf to makefile.lnx.

Version 0.99c [February 7, 1998]
  More type casting.  Removed erroneous overflow test in pngmem.c.
  Added png_buffered_memcpy() and png_buffered_memset(), apply them to rowbytes.
  Added UNIX manual pages libpng.3 (incorporating libpng.txt) and  png.5.

Version 0.99d [February 11, 1998]
  Renamed "far_to_near()" "png_far_to_near()"
  Revised libpng.3
  Version 99c "buffered" operations didn't work as intended.  Replaced them
    with png_memcpy_check() and png_memset_check().
  Added many "if (png_ptr == NULL) return" to quell compiler warnings about
    unused png_ptr, mostly in pngget.c and pngset.c.
  Check for overlength tRNS chunk present when indexed-color PLTE is read.
  Cleaned up spelling errors in libpng.3/libpng.txt
  Corrected a problem with png_get_tRNS() which returned undefined trans array

Version 0.99e [February 28, 1998]
  Corrected png_get_tRNS() again.
  Add parentheses for easier reading of pngget.c, fixed "||" should be "&&".
  Touched up example.c to make more of it compileable, although the entire
    file still can't be compiled (Willem van Schaik)
  Fixed a bug in png_do_shift() (Bryan Tsai)
  Added a space in png.h prototype for png_write_chunk_start()
  Replaced pngtest.png with one created with zlib 1.1.1
  Changed pngtest to report PASS even when file size is different (Jean-loup G.)
  Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)

Version 0.99f [March 5, 1998]
  Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey)
  Moved makefiles into a "scripts" directory, and added INSTALL instruction file
  Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok)
  Added pointers to "note on libpng versions" in makefile.lnx and README
  Added row callback feature when reading and writing nonprogressive rows
    and added a test of this feature in pngtest.c
  Added user transform callbacks, with test of the feature in pngtest.c

Version 0.99g [March 6, 1998, morning]
  Minor changes to pngtest.c to suppress compiler warnings.
  Removed "beta" language from documentation.

Version 0.99h [March 6, 1998, evening]
  Minor changes to previous minor changes to pngtest.c
  Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED
    and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro
  Added user transform capability

Version 1.00 [March 7, 1998]
  Changed several typedefs in pngrutil.c
  Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik)
  Replaced "while(1)" with "for(;;)"
  Added PNGARG() to prototypes in pngtest.c and removed some prototypes
  Updated some of the makefiles (Tom Lane)
  Changed some typedefs (s_start, etc.) in pngrutil.c
  Fixed dimensions of "short_months" array in pngwrite.c
  Replaced ansi2knr.c with the one from jpeg-v6

Version 1.0.0 [March 8, 1998]
  Changed name from 1.00 to 1.0.0 (Adam Costello)
  Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert)

Version 1.0.0a [March 9, 1998]
  Fixed three bugs in pngrtran.c to make gamma+background handling consistent
    (Greg Roelofs)
  Changed format of the PNG_LIBPNG_VER integer to xyyzz instead of xyz
    for major, minor, and bugfix releases.  This is 10001. (Adam Costello,
    Tom Lane)
  Make months range from 1-12 in png_convert_to_rfc1123

Version 1.0.0b [March 13, 1998]
  Quieted compiler complaints about two empty "for" loops in pngrutil.c
  Minor changes to makefile.s2x
  Removed #ifdef/#endif around a png_free() in pngread.c

Version 1.0.1 [March 14, 1998]
  Changed makefile.s2x to reduce security risk of using a relative pathname
  Fixed some typos in the documentation (Greg).
  Fixed a problem with value of "channels" returned by png_read_update_info()

Version 1.0.1a [April 21, 1998]
  Optimized Paeth calculations by replacing abs() function calls with intrinsics
  plus other loop optimizations. Improves avg decoding speed by about 20%.
  Commented out i386istic "align" compiler flags in makefile.lnx.
  Reduced the default warning level in some makefiles, to make them consistent.
  Removed references to IJG and JPEG in the ansi2knr.c copyright statement.
  Fixed a bug in png_do_strip_filler with XXRRGGBB => RRGGBB transformation.
  Added grayscale and 16-bit capability to png_do_read_filler().
  Fixed a bug in pngset.c, introduced in version 0.99c, that sets rowbytes
    too large when writing an image with bit_depth < 8 (Bob Dellaca).
  Corrected some bugs in the experimental weighted filtering heuristics.
  Moved a misplaced pngrutil code block that truncates tRNS if it has more
    than num_palette entries -- test was done before num_palette was defined.
  Fixed a png_convert_to_rfc1123() bug that converts day 31 to 0 (Steve Eddins).
  Changed compiler flags in makefile.wat for better optimization
    (Pawel Mrochen).

Version 1.0.1b [May 2, 1998]
  Relocated png_do_gray_to_rgb() within png_do_read_transformations() (Greg).
  Relocated the png_composite macros from pngrtran.c to png.h (Greg).
  Added makefile.sco (contributed by Mike Hopkirk).
  Fixed two bugs (missing definitions of "istop") introduced in libpng-1.0.1a.
  Fixed a bug in pngrtran.c that would set channels=5 under some circumstances.
  More work on the Paeth-filtering, achieving imperceptible speedup
    (A Kleinert).
  More work on loop optimization which may help when compiled with C++
    compilers.
  Added warnings when people try to use transforms they've defined out.
  Collapsed 4 "i" and "c" loops into single "i" loops in pngrtran and pngwtran.
  Revised paragraph about png_set_expand() in libpng.txt and libpng.3 (Greg)

Version 1.0.1c [May 11, 1998]
  Fixed a bug in pngrtran.c (introduced in libpng-1.0.1a) where the masks for
    filler bytes should have been 0xff instead of 0xf.
  Added max_pixel_depth=32 in pngrutil.c when using FILLER with palette images.
  Moved PNG_WRITE_WEIGHTED_FILTER_SUPPORTED and PNG_WRITE_FLUSH_SUPPORTED
    out of the PNG_WRITE_TRANSFORMS_NOT_SUPPORTED block of pngconf.h
  Added "PNG_NO_WRITE_TRANSFORMS" etc., as alternatives for *_NOT_SUPPORTED,
    for consistency, in pngconf.h
  Added individual "ifndef PNG_NO_[CAPABILITY]" in pngconf.h to make it easier
    to remove unwanted capabilities via the compile line
  Made some corrections to grammar (which, it's) in documentation (Greg).
  Corrected example.c, use of row_pointers in png_write_image().

Version 1.0.1d [May 24, 1998]
  Corrected several statements that used side effects illegally in pngrutil.c
    and pngtrans.c, that were introduced in version 1.0.1b
  Revised png_read_rows() to avoid repeated if-testing for NULL (A Kleinert)
  More corrections to example.c, use of row_pointers in png_write_image()
    and png_read_rows().
  Added pngdll.mak and pngdef.pas to scripts directory, contributed by
    Bob Dellaca, to make a png32bd.dll with Borland C++ 4.5
  Fixed error in example.c with png_set_text: num_text is 3, not 2 (Guido V.)
  Changed several loops from count-down to count-up, for consistency.

Version 1.0.1e [June 6, 1998]
  Revised libpng.txt and libpng.3 description of png_set_read|write_fn(), and
    added warnings when people try to set png_read_fn and png_write_fn in
    the same structure.
  Added a test such that png_do_gamma will be done when num_trans==0
    for truecolor images that have defined a background.  This corrects an
    error that was introduced in libpng-0.90 that can cause gamma processing
    to be skipped.
  Added tests in png.h to include "trans" and "trans_values" in structures
    when PNG_READ_BACKGROUND_SUPPORTED or PNG_READ_EXPAND_SUPPORTED is defined.
  Add png_free(png_ptr->time_buffer) in png_destroy_read_struct()
  Moved png_convert_to_rfc_1123() from pngwrite.c to png.c
  Added capability for user-provided malloc_fn() and free_fn() functions,
    and revised pngtest.c to demonstrate their use, replacing the
    PNGTEST_DEBUG_MEM feature.
  Added makefile.w32, for Microsoft C++ 4.0 and later (Tim Wegner).

Version 1.0.2 [June 14, 1998]
  Fixed two bugs in makefile.bor .

Version 1.0.2a [December 30, 1998]
  Replaced and extended code that was removed from png_set_filler() in 1.0.1a.
  Fixed a bug in png_do_filler() that made it fail to write filler bytes in
    the left-most pixel of each row (Kevin Bracey).
  Changed "static pngcharp tIME_string" to "static char tIME_string[30]"
    in pngtest.c (Duncan Simpson).
  Fixed a bug in pngtest.c that caused pngtest to try to write a tIME chunk
    even when no tIME chunk was present in the source file.
  Fixed a problem in pngrutil.c: gray_to_rgb didn't always work with 16-bit.
  Fixed a problem in png_read_push_finish_row(), which would not skip some
    passes that it should skip, for images that are less than 3 pixels high.
  Interchanged the order of calls to png_do_swap() and png_do_shift()
    in pngwtran.c (John Cromer).
  Added #ifdef PNG_DEBUG/#endif surrounding use of PNG_DEBUG in png.h .
  Changed "bad adaptive filter type" from error to warning in pngrutil.c .
  Fixed a documentation error about default filtering with 8-bit indexed-color.
  Separated the PNG_NO_STDIO macro into PNG_NO_STDIO and PNG_NO_CONSOLE_IO
    (L. Peter Deutsch).
  Added png_set_rgb_to_gray() and png_get_rgb_to_gray_status() functions.
  Added png_get_copyright() and png_get_header_version() functions.
  Revised comments on png_set_progressive_read_fn() in libpng.txt and example.c
  Added information about debugging in libpng.txt and libpng.3 .
  Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and
    makefile.sco.
  Removed lines after Dynamic Dependencies" in makefile.aco .
  Revised makefile.dec to make a shared library (Jeremie Petit).
  Removed trailing blanks from all files.

Version 1.0.2a [January 6, 1999]
  Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h
  Added "if" tests to silence complaints about unused png_ptr in png.h and png.c
  Changed "check_if_png" function in example.c to return true (nonzero) if PNG.
  Changed libpng.txt to demonstrate png_sig_cmp() instead of png_check_sig()
    which is obsolete.

Version 1.0.3 [January 14, 1999]
  Added makefile.hux, for Hewlett Packard HPUX 10.20 and 11.00 (Jim Rice)
  Added a statement of Y2K compliance in png.h, libpng.3, and Y2KINFO.

Version 1.0.3a [August 12, 1999]
  Added check for PNG_READ_INTERLACE_SUPPORTED in pngread.c; issue a warning
    if an attempt is made to read an interlaced image when it's not supported.
  Added check if png_ptr->trans is defined before freeing it in pngread.c
  Modified the Y2K statement to include versions back to version 0.71
  Fixed a bug in the check for valid IHDR bit_depth/color_types in pngrutil.c
  Modified makefile.wat (added -zp8 flag, ".symbolic", changed some comments)
  Replaced leading blanks with tab characters in makefile.hux
  Changed "dworkin.wustl.edu" to "ccrc.wustl.edu" in various documents.
  Changed (float)red and (float)green to (double)red, (double)green
    in png_set_rgb_to_gray() to avoid "promotion" problems in AIX.
  Fixed a bug in pngconf.h that omitted <stdio.h> when PNG_DEBUG==0 (K Bracey).
  Reformatted libpng.3 and libpngpf.3 with proper fonts (script by J. vanZandt).
  Updated documentation to refer to the PNG-1.2 specification.
  Removed ansi2knr.c and left pointers to the latest source for ansi2knr.c
    in makefile.knr, INSTALL, and README (L. Peter Deutsch)
  Fixed bugs in calculation of the length of rowbytes when adding alpha
    channels to 16-bit images, in pngrtran.c (Chris Nokleberg)
  Added function png_set_user_transform_info() to store user_transform_ptr,
    user_depth, and user_channels into the png_struct, and a function
    png_get_user_transform_ptr() to retrieve the pointer (Chris Nokleberg)
  Added function png_set_empty_plte_permitted() to make libpng useable
    in MNG applications.
  Corrected the typedef for png_free_ptr in png.h (Jesse Jones).
  Correct gamma with srgb is 45455 instead of 45000 in pngrutil.c, to be
    consistent with PNG-1.2, and allow variance of 500 before complaining.
  Added assembler code contributed by Intel in file pngvcrd.c and modified
    makefile.w32 to use it (Nirav Chhatrapati, INTEL Corporation,
    Gilles Vollant)
  Changed "ln -s -f" to "ln -f -s" in the makefiles to make Solaris happy.
  Added some aliases for png_set_expand() in pngrtran.c, namely
    png_set_expand_PLTE(), png_set_expand_depth(), and png_set_expand_tRNS()
    (Greg Roelofs, in "PNG: The Definitive Guide").
  Added makefile.beo for BEOS on X86, contributed by Sander Stok.

Version 1.0.3b [August 26, 1999]
  Replaced 2147483647L several places with PNG_MAX_UINT macro, defined in png.h
  Changed leading blanks to tabs in all makefiles.
  Define PNG_USE_PNGVCRD in makefile.w32, to get MMX assembler code.
  Made alternate versions of  png_set_expand() in pngrtran.c, namely
    png_set_gray_1_2_4_to_8, png_set_palette_to_rgb, and png_set_tRNS_to_alpha
    (Greg Roelofs, in "PNG: The Definitive Guide").  Deleted the 1.0.3a aliases.
  Relocated start of 'extern "C"' block in png.h so it doesn't include pngconf.h
  Revised calculation of num_blocks in pngmem.c to avoid a potentially
    negative shift distance, whose results are undefined in the C language.
  Added a check in pngset.c to prevent writing multiple tIME chunks.
  Added a check in pngwrite.c to detect invalid small window_bits sizes.

Version 1.0.3d [September 4, 1999]
  Fixed type casting of igamma in pngrutil.c
  Added new png_expand functions to scripts/pngdef.pas and pngos2.def
  Added a demo read_user_transform_fn that examines the row filters in pngtest.c

Version 1.0.4 [September 24, 1999, not distributed publicly]
  Define PNG_ALWAYS_EXTERN in pngconf.h if __STDC__ is defined
  Delete #define PNG_INTERNAL and include "png.h" from pngasmrd.h
  Made several minor corrections to pngtest.c
  Renamed the makefiles with longer but more user friendly extensions.
  Copied the PNG copyright and license to a separate LICENSE file.
  Revised documentation, png.h, and example.c to remove reference to
    "viewing_gamma" which no longer appears in the PNG specification.
  Revised pngvcrd.c to use MMX code for interlacing only on the final pass.
  Updated pngvcrd.c to use the faster C filter algorithms from libpng-1.0.1a
  Split makefile.win32vc into two versions, makefile.vcawin32 (uses MMX
    assembler code) and makefile.vcwin32 (doesn't).
  Added a CPU timing report to pngtest.c (enabled by defining PNGTEST_TIMING)
  Added a copy of pngnow.png to the distribution.

Version 1.0.4a [September 25, 1999]
  Increase max_pixel_depth in pngrutil.c if a user transform needs it.
  Changed several division operations to right-shifts in pngvcrd.c

Version 1.0.4b [September 30, 1999]
  Added parentheses in line 3732 of pngvcrd.c
  Added a comment in makefile.linux warning about buggy -O3 in pgcc 2.95.1

Version 1.0.4c [October 1, 1999]
  Added a "png_check_version" function in png.c and pngtest.c that will generate
    a helpful compiler error if an old png.h is found in the search path.
  Changed type of png_user_transform_depth|channels from int to png_byte.
  Added "Libpng is OSI Certified Open Source Software" statement to png.h

Version 1.0.4d [October 6, 1999]
  Changed 0.45 to 0.45455 in png_set_sRGB()
  Removed unused PLTE entries from pngnow.png
  Re-enabled some parts of pngvcrd.c (png_combine_row) that work properly.

Version 1.0.4e [October 10, 1999]
  Fixed sign error in pngvcrd.c (Greg Roelofs)
  Replaced some instances of memcpy with simple assignments in pngvcrd (GR-P)

Version 1.0.4f [October 15, 1999]
  Surrounded example.c code with #if 0 .. #endif to prevent people from
    inadvertently trying to compile it.
  Changed png_get_header_version() from a function to a macro in png.h
  Added type casting mostly in pngrtran.c and pngwtran.c
  Removed some pointless "ptr = NULL" in pngmem.c
  Added a "contrib" directory containing the source code from Greg's book.

Version 1.0.5 [October 15, 1999]
  Minor editing of the INSTALL and README files.

Version 1.0.5a [October 23, 1999]
  Added contrib/pngsuite and contrib/pngminus (Willem van Schaik)
  Fixed a typo in the png_set_sRGB() function call in example.c (Jan Nijtmans)
  Further optimization and bugfix of pngvcrd.c
  Revised pngset.c so that it does not allocate or free memory in the user's
    text_ptr structure.  Instead, it makes its own copy.
  Created separate write_end_info_struct in pngtest.c for a more severe test.
  Added code in pngwrite.c to free info_ptr->text[i].key to stop a memory leak.

Version 1.0.5b [November 23, 1999]
  Moved PNG_FLAG_HAVE_CHUNK_HEADER, PNG_FLAG_BACKGROUND_IS_GRAY and
    PNG_FLAG_WROTE_tIME from flags to mode.
  Added png_write_info_before_PLTE() function.
  Fixed some typecasting in contrib/gregbook/*.c
  Updated scripts/makevms.com and added makevms.com to contrib/gregbook
    and contrib/pngminus (Martin Zinser)

Version 1.0.5c [November 26, 1999]
  Moved png_get_header_version from png.h to png.c, to accommodate ansi2knr.
  Removed all global arrays (according to PNG_NO_GLOBAL_ARRAYS macro), to
    accommodate making DLL's: Moved usr_png_ver from global variable to function
    png_get_header_ver() in png.c.  Moved png_sig to png_sig_bytes in png.c and
    eliminated use of png_sig in pngwutil.c.  Moved the various png_CHNK arrays
    into pngtypes.h.  Eliminated use of global png_pass arrays.  Declared the
    png_CHNK and png_pass arrays to be "const".  Made the global arrays
    available to applications (although none are used in libpng itself) when
    PNG_NO_GLOBAL_ARRAYS is not defined or when PNG_GLOBAL_ARRAYS is defined.
  Removed some extraneous "-I" from contrib/pngminus/makefile.std
  Changed the PNG_sRGB_INTENT macros in png.h to be consistent with PNG-1.2.
  Change PNG_SRGB_INTENT to PNG_sRGB_INTENT in libpng.txt and libpng.3

Version 1.0.5d [November 29, 1999]
  Add type cast (png_const_charp) two places in png.c
  Eliminated pngtypes.h; use macros instead to declare PNG_CHNK arrays.
  Renamed "PNG_GLOBAL_ARRAYS" to "PNG_USE_GLOBAL_ARRAYS" and made available
    to applications a macro "PNG_USE_LOCAL_ARRAYS".
  comment out (with #ifdef) all the new declarations when
    PNG_USE_GLOBAL_ARRAYS is defined.
  Added PNG_EXPORT_VAR macro to accommodate making DLL's.

Version 1.0.5e [November 30, 1999]
  Added iCCP, iTXt, and sPLT support; added "lang" member to the png_text
    structure; refactored the inflate/deflate support to make adding new chunks
    with trailing compressed parts easier in the future, and added new functions
    png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
    png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
  NOTE: Applications that write text chunks MUST define png_text->lang
    before calling png_set_text(). It must be set to NULL if you want to
    write tEXt or zTXt chunks.  If you want your application to be able to
    run with older versions of libpng, use

      #ifdef PNG_iTXt_SUPPORTED
         png_text[i].lang = NULL;
      #endif

  Changed png_get_oFFs() and png_set_oFFs() to use signed rather than unsigned
    offsets (Eric S. Raymond).
  Combined PNG_READ_cHNK_SUPPORTED and PNG_WRITE_cHNK_SUPPORTED macros into
    PNG_cHNK_SUPPORTED and combined the three types of PNG_text_SUPPORTED
    macros, leaving the separate macros also available.
  Removed comments on #endifs at the end of many short, non-nested #if-blocks.

Version 1.0.5f [December 6, 1999]
  Changed makefile.solaris to issue a warning about potential problems when
    the ucb "ld" is in the path ahead of the ccs "ld".
  Removed "- [date]" from the "synopsis" line in libpng.3 and libpngpf.3.
  Added sCAL chunk support (Eric S. Raymond).

Version 1.0.5g [December 7, 1999]
  Fixed "png_free_spallettes" typo in png.h
  Added code to handle new chunks in pngpread.c
  Moved PNG_CHNK string macro definitions outside of PNG_NO_EXTERN block
  Added "translated_key" to png_text structure and png_write_iTXt().
  Added code in pngwrite.c to work around a newly discovered zlib bug.

Version 1.0.5h [December 10, 1999]
  NOTE: regarding the note for version 1.0.5e, the following must also
    be included in your code:
        png_text[i].translated_key = NULL;
  Unknown chunk handling is now supported.
  Option to eliminate all floating point support was added.  Some new
    fixed-point functions such as png_set_gAMA_fixed() were added.
  Expanded tabs and removed trailing blanks in source files.

Version 1.0.5i [December 13, 1999]
  Added some type casts to silence compiler warnings.
  Renamed "png_free_spalette" to "png_free_spalettes" for consistency.
  Removed leading blanks from a #define in pngvcrd.c
  Added some parameters to the new png_set_keep_unknown_chunks() function.
  Added a test for up->location != 0 in the first instance of writing
    unknown chunks in pngwrite.c
  Changed "num" to "i" in png_free_spalettes() and png_free_unknowns() to
    prevent recursion.
  Added png_free_hIST() function.
  Various patches to fix bugs in the sCAL and integer cHRM processing,
    and to add some convenience macros for use with sCAL.

Version 1.0.5j [December 21, 1999]
  Changed "unit" parameter of png_write_sCAL from png_byte to int, to work
    around buggy compilers.
  Added new type "png_fixed_point" for integers that hold float*100000 values
  Restored backward compatibility of tEXt/zTXt chunk processing:
    Restored the first four members of png_text to the same order as v.1.0.5d.
    Added members "lang_key" and "itxt_length" to png_text struct.  Set
    text_length=0 when "text" contains iTXt data.  Use the "compression"
    member to distinguish among tEXt/zTXt/iTXt types.  Added
    PNG_ITXT_COMPRESSION_NONE (1) and PNG_ITXT_COMPRESSION_zTXt(2) macros.
    The "Note" above, about backward incompatibility of libpng-1.0.5e, no
    longer applies.
  Fixed png_read|write_iTXt() to read|write parameters in the right order,
    and to write the iTXt chunk after IDAT if it appears in the end_ptr.
  Added pnggccrd.c, version of pngvcrd.c Intel assembler for gcc (Greg Roelofs)
  Reversed the order of trying to write floating-point and fixed-point gAMA.

Version 1.0.5k [December 27, 1999]
  Added many parentheses, e.g., "if (a && b & c)" becomes "if (a && (b & c))"
  Added png_handle_as_unknown() function (Glenn)
  Added png_free_chunk_list() function and chunk_list and num_chunk_list members
    of png_ptr.
  Eliminated erroneous warnings about multiple sPLT chunks and sPLT-after-PLTE.
  Fixed a libpng-1.0.5h bug in pngrutil.c that was issuing erroneous warnings
    about ignoring incorrect gAMA with sRGB (gAMA was in fact not ignored)
  Added png_free_tRNS(); png_set_tRNS() now malloc's its own trans array (ESR).
  Define png_get_int_32 when oFFs chunk is supported as well as when pCAL is.
  Changed type of proflen from png_int_32 to png_uint_32 in png_get_iCCP().

Version 1.0.5l [January 1, 2000]
  Added functions png_set_read_user_chunk_fn() and png_get_user_chunk_ptr()
    for setting a callback function to handle unknown chunks and for
    retrieving the associated user pointer (Glenn).

Version 1.0.5m [January 7, 2000]
  Added high-level functions png_read_png(), png_write_png(), png_free_pixels().

Version 1.0.5n [January 9, 2000]
  Added png_free_PLTE() function, and modified png_set_PLTE() to malloc its
    own memory for info_ptr->palette.  This makes it safe for the calling
    application to free its copy of the palette any time after it calls
    png_set_PLTE().

Version 1.0.5o [January 20, 2000]
  Cosmetic changes only (removed some trailing blanks and TABs)

Version 1.0.5p [January 31, 2000]
  Renamed pngdll.mak to makefile.bd32
  Cosmetic changes in pngtest.c

Version 1.0.5q [February 5, 2000]
  Relocated the makefile.solaris warning about PATH problems.
  Fixed pngvcrd.c bug by pushing/popping registers in mmxsupport (Bruce Oberg)
  Revised makefile.gcmmx
  Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros

Version 1.0.5r [February 7, 2000]
  Removed superfluous prototype for png_get_itxt from png.h
  Fixed a bug in pngrtran.c that improperly expanded the background color.
  Return *num_text=0 from png_get_text() when appropriate, and fix documentation
    of png_get_text() in libpng.txt/libpng.3.

Version 1.0.5s [February 18, 2000]
  Added "png_jmp_env()" macro to pngconf.h, to help people migrate to the
    new error handler that's planned for the next libpng release, and changed
    example.c, pngtest.c, and contrib programs to use this macro.
  Revised some of the DLL-export macros in pngconf.h (Greg Roelofs)
  Fixed a bug in png_read_png() that caused it to fail to expand some images
    that it should have expanded.
  Fixed some mistakes in the unused and undocumented INCH_CONVERSIONS functions
    in pngget.c
  Changed the allocation of palette, history, and trans arrays back to
    the version 1.0.5 method (linking instead of copying) which restores
    backward compatibility with version 1.0.5.  Added some remarks about
    that in example.c.  Added "free_me" member to info_ptr and png_ptr
    and added png_free_data() function.
  Updated makefile.linux and makefile.gccmmx to make directories conditionally.
  Made cosmetic changes to pngasmrd.h
  Added png_set_rows() and png_get_rows(), for use with png_read|write_png().
  Modified png_read_png() to allocate info_ptr->row_pointers only if it
    hasn't already been allocated.

Version 1.0.5t [March 4, 2000]
  Changed png_jmp_env() migration aiding macro to png_jmpbuf().
  Fixed "interlace" typo (should be "interlaced") in contrib/gregbook/read2-x.c
  Fixed bug with use of PNG_BEFORE_IHDR bit in png_ptr->mode, introduced when
    PNG_FLAG_HAVE_CHUNK_HEADER was moved into png_ptr->mode in version 1.0.5b
  Files in contrib/gregbook were revised to use png_jmpbuf() and to select
    a 24-bit visual if one is available, and to allow abbreviated options.
  Files in contrib/pngminus were revised to use the png_jmpbuf() macro.
  Removed spaces in makefile.linux and makefile.gcmmx, introduced in 1.0.5s

Version 1.0.5u [March 5, 2000]
  Simplified the code that detects old png.h in png.c and pngtest.c
  Renamed png_spalette (_p, _pp) to png_sPLT_t (_tp, _tpp)
  Increased precision of rgb_to_gray calculations from 8 to 15 bits and
    added png_set_rgb_to_gray_fixed() function.
  Added makefile.bc32 (32-bit Borland C++, C mode)

Version 1.0.5v [March 11, 2000]
  Added some parentheses to the png_jmpbuf macro definition.
  Updated references to the zlib home page, which has moved to freesoftware.com.
  Corrected bugs in documentation regarding png_read_row() and png_write_row().
  Updated documentation of png_rgb_to_gray calculations in libpng.3/libpng.txt.
  Renamed makefile.borland,turboc3 back to makefile.bor,tc3 as in version 1.0.3,
    revised borland makefiles; added makefile.ibmvac3 and makefile.gcc (Cosmin)

Version 1.0.6 [March 20, 2000]
  Minor revisions of makefile.bor, libpng.txt, and gregbook/rpng2-win.c
  Added makefile.sggcc (SGI IRIX with gcc)

Version 1.0.6d [April 7, 2000]
  Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO
  Added data_length parameter to png_decompress_chunk() function
  Revised documentation to remove reference to abandoned png_free_chnk functions
  Fixed an error in png_rgb_to_gray_fixed()
  Revised example.c, usage of png_destroy_write_struct().
  Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file
  Added a check for info_ptr->free_me&PNG_FREE_TEXT when freeing text in png.c
  Simplify png_sig_bytes() function to remove use of non-ISO-C strdup().

Version 1.0.6e [April 9, 2000]
  Added png_data_freer() function.
  In the code that checks for over-length tRNS chunks, added check of
    info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann)
  Minor revisions of libpng.txt/libpng.3.
  Check for existing data and free it if the free_me flag is set, in png_set_*()
    and png_handle_*().
  Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED
    is defined.
  Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c
    and mentioned the purposes of the two macros in libpng.txt/libpng.3.

Version 1.0.6f [April 14, 2000]
  Revised png_set_iCCP() and png_set_rows() to avoid prematurely freeing data.
  Add checks in png_set_text() for NULL members of the input text structure.
  Revised libpng.txt/libpng.3.
  Removed superfluous prototype for png_set_iTXt from png.h
  Removed "else" from pngread.c, after png_error(), and changed "0" to "length".
  Changed several png_errors about malformed ancillary chunks to png_warnings.

Version 1.0.6g [April 24, 2000]
  Added png_pass-* arrays to pnggccrd.c when PNG_USE_LOCAL_ARRAYS is defined.
  Relocated paragraph about png_set_background() in libpng.3/libpng.txt
    and other revisions (Matthias Benckmann)
  Relocated info_ptr->free_me, png_ptr->free_me, and other info_ptr and
    png_ptr members to restore binary compatibility with libpng-1.0.5
    (breaks compatibility with libpng-1.0.6).

Version 1.0.6h [April 24, 2000]
  Changed shared library so-number pattern from 2.x.y.z to xy.z (this builds
    libpng.so.10 & libpng.so.10.6h instead of libpng.so.2 & libpng.so.2.1.0.6h)
    This is a temporary change for test purposes.

Version 1.0.6i [May 2, 2000]
  Rearranged some members at the end of png_info and png_struct, to put
    unknown_chunks_num and free_me within the original size of the png_structs
    and free_me, png_read_user_fn, and png_free_fn within the original png_info,
    because some old applications allocate the structs directly instead of
    using png_create_*().
  Added documentation of user memory functions in libpng.txt/libpng.3
  Modified png_read_png so that it will use user_allocated row_pointers
    if present, unless free_me directs that it be freed, and added description
    of the use of png_set_rows() and png_get_rows() in libpng.txt/libpng.3.
  Added PNG_LEGACY_SUPPORTED macro, and #ifdef out all new (since version
    1.00) members of png_struct and png_info, to regain binary compatibility
    when you define this macro.  Capabilities lost in this event
    are user transforms (new in version 1.0.0),the user transform pointer
    (new in version 1.0.2), rgb_to_gray (new in 1.0.5), iCCP, sCAL, sPLT,
    the high-level interface, and unknown chunks support (all new in 1.0.6).
    This was necessary because of old applications that allocate the structs
    directly as authors were instructed to do in libpng-0.88 and earlier,
    instead of using png_create_*().
  Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which
    can be used to detect codes that directly allocate the structs, and
    code to check these modes in png_read_init() and png_write_init() and
    generate a libpng error if the modes aren't set and PNG_LEGACY_SUPPORTED
    was not defined.
  Added makefile.intel and updated makefile.watcom (Pawel Mrochen)

Version 1.0.6j [May 3, 2000]
  Overloaded png_read_init() and png_write_init() with macros that convert
    calls to png_read_init_2() or png_write_init_2() that check the version
    and structure sizes.

Version 1.0.7beta11 [May 7, 2000]
  Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes
    which are no longer used.
  Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is
    defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXt_SUPPORTED
    is defined.
  Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory
    overrun when old applications fill the info_ptr->text structure directly.
  Added PNGAPI macro, and added it to the definitions of all exported functions.
  Relocated version macro definitions ahead of the includes of zlib.h and
    pngconf.h in png.h.

Version 1.0.7beta12 [May 12, 2000]
  Revised pngset.c to avoid a problem with expanding the png_debug macro.
  Deleted some extraneous defines from pngconf.h
  Made PNG_NO_CONSOLE_IO the default condition when PNG_BUILD_DLL is defined.
  Use MSC _RPTn debugging instead of fprintf if _MSC_VER is defined.
  Added png_access_version_number() function.
  Check for mask&PNG_FREE_CHNK (for TEXT, SCAL, PCAL) in png_free_data().
  Expanded libpng.3/libpng.txt information about png_data_freer().

Version 1.0.7beta14 [May 17, 2000] (beta13 was not published)
  Changed pnggccrd.c and pngvcrd.c to handle bad adaptive filter types as
    warnings instead of errors, as pngrutil.c does.
  Set the PNG_INFO_IDAT valid flag in png_set_rows() so png_write_png()
    will actually write IDATs.
  Made the default PNG_USE_LOCAL_ARRAYS depend on PNG_DLL instead of WIN32.
  Make png_free_data() ignore its final parameter except when freeing data
    that can have multiple instances (text, sPLT, unknowns).
  Fixed a new bug in png_set_rows().
  Removed info_ptr->valid tests from png_free_data(), as in version 1.0.5.
  Added png_set_invalid() function.
  Fixed incorrect illustrations of png_destroy_write_struct() in example.c.

Version 1.0.7beta15 [May 30, 2000]
  Revised the deliberately erroneous Linux setjmp code in pngconf.h to produce
    fewer error messages.
  Rearranged checks for Z_OK to check the most likely path first in pngpread.c
    and pngwutil.c.
  Added checks in pngtest.c for png_create_*() returning NULL, and mentioned
    in libpng.txt/libpng.3 the need for applications to check this.
  Changed names of png_default_*() functions in pngtest to pngtest_*().
  Changed return type of png_get_x|y_offset_*() from png_uint_32 to png_int_32.
  Fixed some bugs in the unused PNG_INCH_CONVERSIONS functions in pngget.c
  Set each pointer to NULL after freeing it in png_free_data().
  Worked around a problem in pngconf.h; AIX's strings.h defines an "index"
    macro that conflicts with libpng's png_color_16.index. (Dimitri
    Papadapoulos)
  Added "msvc" directory with MSVC++ project files (Simon-Pierre Cadieux).

Version 1.0.7beta16 [June 4, 2000]
  Revised the workaround of AIX string.h "index" bug.
  Added a check for overlength PLTE chunk in pngrutil.c.
  Added PNG_NO_POINTER_INDEXING macro to use array-indexing instead of pointer
    indexing in pngrutil.c and pngwutil.c to accommodate a buggy compiler.
  Added a warning in png_decompress_chunk() when it runs out of data, e.g.
    when it tries to read an erroneous PhotoShop iCCP chunk.
  Added PNG_USE_DLL macro.
  Revised the copyright/disclaimer/license notice.
  Added contrib/msvctest directory

Version 1.0.7rc1 [June 9, 2000]
  Corrected the definition of PNG_TRANSFORM_INVERT_ALPHA  (0x0400 not 0x0200)
  Added contrib/visupng directory (Willem van Schaik)

Version 1.0.7beta18 [June 23, 2000]
  Revised PNGAPI definition, and pngvcrd.c to work with __GCC__
    and do not redefine PNGAPI if it is passed in via a compiler directive.
  Revised visupng/PngFile.c to remove returns from within the Try block.
  Removed leading underscores from "_PNG_H" and "_PNG_SAVE_BSD_SOURCE" macros.
  Updated contrib/visupng/cexcept.h to version 1.0.0.
  Fixed bugs in pngwrite.c and pngwutil.c that prevented writing iCCP chunks.

Version 1.0.7rc2 [June 28, 2000]
  Updated license to include disclaimers required by UCITA.
  Fixed "DJBPP" typo in pnggccrd.c introduced in beta18.

Version 1.0.7 [July 1, 2000]
  Revised the definition of "trans_values" in libpng.3/libpng.txt

Version 1.0.8beta1 [July 8, 2000]
  Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks.
  Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and
    pngwutil.c.
  Changed PNG_EXPORT_VAR to use PNG_IMPEXP, in pngconf.h.
  Removed unused "#include <assert.h>" from png.c
  Added WindowsCE support.
  Revised pnggccrd.c to work with gcc-2.95.2 and in the Cygwin environment.

Version 1.0.8beta2 [July 10, 2000]
  Added project files to the wince directory and made further revisions
    of pngtest.c, pngrio.c, and pngwio.c in support of WindowsCE.

Version 1.0.8beta3 [July 11, 2000]
  Only set the PNG_FLAG_FREE_TRNS or PNG_FREE_TRNS flag in png_handle_tRNS()
    for indexed-color input files to avoid potential double-freeing trans array
    under some unusual conditions; problem was introduced in version 1.0.6f.
  Further revisions to pngtest.c and files in the wince subdirectory.

Version 1.0.8beta4 [July 14, 2000]
  Added the files pngbar.png and pngbar.jpg to the distribution.
  Added makefile.cygwin, and cygwin support in pngconf.h
  Added PNG_NO_ZALLOC_ZERO macro (makes png_zalloc skip zeroing memory)

Version 1.0.8rc1 [July 16, 2000]
  Revised png_debug() macros and statements to eliminate compiler warnings.

Version 1.0.8 [July 24, 2000]
  Added png_flush() in pngwrite.c, after png_write_IEND().
  Updated makefile.hpux to build a shared library.

Version 1.0.9beta1 [November 10, 2000]
  Fixed typo in scripts/makefile.hpux
  Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser)
  Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser)
  Changed "cdrom.com" in documentation to "libpng.org"
  Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg).
  Changed type of "params" from voidp to png_voidp in png_read|write_png().
  Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h.
  Revised the 3 instances of WRITEFILE in pngtest.c.
  Relocated "msvc" and "wince" project subdirectories into "dll" subdirectory.
  Updated png.rc in dll/msvc project
  Revised makefile.dec to define and use LIBPATH and INCPATH
  Increased size of global png_libpng_ver[] array from 12 to 18 chars.
  Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const.
  Removed duplicate png_crc_finish() from png_handle_bKGD() function.
  Added a warning when application calls png_read_update_info() multiple times.
  Revised makefile.cygwin
  Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
  Replaced png_set_empty_plte_permitted() with png_permit_mng_features().

Version 1.0.9beta2 [November 19, 2000]
  Renamed the "dll" subdirectory "projects".
  Added borland project files to "projects" subdirectory.
  Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when appropriate.
  Add error message in png_set_compression_buffer_size() when malloc fails.

Version 1.0.9beta3 [November 23, 2000]
  Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project.
  Removed the png_flush() in pngwrite.c that crashes some applications
    that don't set png_output_flush_fn.
  Added makefile.macosx and makefile.aix to scripts directory.

Version 1.0.9beta4 [December 1, 2000]
  Change png_chunk_warning to png_warning in png_check_keyword().
  Increased the first part of msg buffer from 16 to 18 in png_chunk_error().

Version 1.0.9beta5 [December 15, 2000]
  Added support for filter method 64 (for PNG datastreams embedded in MNG).

Version 1.0.9beta6 [December 18, 2000]
  Revised png_set_filter() to accept filter method 64 when appropriate.
  Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to
    help prevent applications from using MNG features in PNG datastreams.
  Added png_permit_mng_features() function.
  Revised libpng.3/libpng.txt.  Changed "filter type" to "filter method".

Version 1.0.9rc1 [December 23, 2000]
  Revised test for PNG_HAVE_PNG_SIGNATURE in pngrutil.c
  Fixed error handling of unknown compression type in png_decompress_chunk().
  In pngconf.h, define __cdecl when _MSC_VER is defined.

Version 1.0.9beta7 [December 28, 2000]
  Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several places.
  Revised memory management in png_set_hIST and png_handle_hIST in a backward
    compatible manner.  PLTE and tRNS were revised similarly.
  Revised the iCCP chunk reader to ignore trailing garbage.

Version 1.0.9beta8 [January 12, 2001]
  Moved pngasmrd.h into pngconf.h.
  Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.

Version 1.0.9beta9 [January 15, 2001]
  Added png_set_invalid, png_permit_mng_features, and png_mmx_supported to
    wince and msvc project module definition files.
  Minor revision of makefile.cygwin.
  Fixed bug with progressive reading of narrow interlaced images in pngpread.c

Version 1.0.9beta10 [January 16, 2001]
  Do not typedef png_FILE_p in pngconf.h when PNG_NO_STDIO is defined.
  Fixed "png_mmx_supported" typo in project definition files.

Version 1.0.9beta11 [January 19, 2001]
  Updated makefile.sgi to make shared library.
  Removed png_mmx_support() function and disabled PNG_MNG_FEATURES_SUPPORTED
    by default, for the benefit of DLL forward compatibility.  These will
    be re-enabled in version 1.2.0.

Version 1.0.9rc2 [January 22, 2001]
  Revised cygwin support.

Version 1.0.9 [January 31, 2001]
  Added check of cygwin's ALL_STATIC in pngconf.h
  Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.

Version 1.0.10beta1 [March 14, 2001]
  Revised makefile.dec, makefile.sgi, and makefile.sggcc; added makefile.hpgcc.
  Reformatted libpng.3 to eliminate bad line breaks.
  Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c
  Added prototype for png_mmx_support() near the top of pnggccrd.c
  Moved some error checking from png_handle_IHDR to png_set_IHDR.
  Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
  Revised png_mmx_support() function in pnggccrd.c
  Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
  Fixed memory leak in contrib/visupng/PngFile.c
  Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
  Added warnings when retrieving or setting gamma=0.
  Increased the first part of msg buffer from 16 to 18 in png_chunk_warning().

Version 1.0.10rc1 [March 23, 2001]
  Changed all instances of memcpy, strcpy, and strlen to png_memcpy, png_strcpy,
    and png_strlen.
  Revised png_mmx_supported() function in pnggccrd.c to return proper value.
  Fixed bug in progressive reading (pngpread.c) with small images (height < 8).

Version 1.0.10 [March 30, 2001]
  Deleted extraneous space (introduced in 1.0.9) from line 42 of makefile.cygwin
  Added beos project files (Chris Herborth)

Version 1.0.11beta1 [April 3, 2001]
  Added type casts on several png_malloc() calls (Dimitri Papadapoulos).
  Removed a no-longer needed AIX work-around from pngconf.h
  Changed several "//" single-line comments to C-style in pnggccrd.c

Version 1.0.11beta2 [April 11, 2001]
  Removed PNGAPI from several functions whose prototypes did not have PNGAPI.
  Updated scripts/pngos2.def

Version 1.0.11beta3 [April 14, 2001]
  Added checking the results of many instances of png_malloc() for NULL

Version 1.0.11beta4 [April 20, 2001]
  Undid the changes from version 1.0.11beta3.  Added a check for NULL return
    from user's malloc_fn().
  Removed some useless type casts of the NULL pointer.
  Added makefile.netbsd

Version 1.0.11 [April 27, 2001]
  Revised makefile.netbsd

Version 1.0.12beta1 [May 14, 2001]
  Test for Windows platform in pngconf.h when including malloc.h (Emmanuel Blot)
  Updated makefile.cygwin and handling of Cygwin's ALL_STATIC in pngconf.h
  Added some never-to-be-executed code in pnggccrd.c to quiet compiler warnings.
  Eliminated the png_error about apps using png_read|write_init().  Instead,
    libpng will reallocate the png_struct and info_struct if they are too small.
    This retains future binary compatibility for old applications written for
    libpng-0.88 and earlier.

Version 1.2.0beta1 [May 6, 2001]
  Bumped DLLNUM to 2.
  Re-enabled PNG_MNG_FEATURES_SUPPORTED and enabled PNG_ASSEMBLER_CODE_SUPPORTED
    by default.
  Added runtime selection of MMX features.
  Added png_set_strip_error_numbers function and related macros.

Version 1.2.0beta2 [May 7, 2001]
  Finished merging 1.2.0beta1 with version 1.0.11
  Added a check for attempts to read or write PLTE in grayscale PNG datastreams.

Version 1.2.0beta3 [May 17, 2001]
  Enabled user memory function by default.
  Modified png_create_struct so it passes user mem_ptr to user memory allocator.
  Increased png_mng_features flag from png_byte to png_uint_32.
  Bumped shared-library (so-number) and dll-number to 3.

Version 1.2.0beta4 [June 23, 2001]
  Check for missing profile length field in iCCP chunk and free chunk_data
    in case of truncated iCCP chunk.
  Bumped shared-library number to 3 in makefile.sgi and makefile.sggcc
  Bumped dll-number from 2 to 3 in makefile.cygwin
  Revised contrib/gregbook/rpng*-x.c to avoid a memory leak and to exit cleanly
    if user attempts to run it on an 8-bit display.
  Updated contrib/gregbook
  Use png_malloc instead of png_zalloc to allocate palette in pngset.c
  Updated makefile.ibmc
  Added some typecasts to eliminate gcc 3.0 warnings.  Changed prototypes
    of png_write_oFFS width and height from png_uint_32 to png_int_32.
  Updated example.c
  Revised prototypes for png_debug_malloc and png_debug_free in pngtest.c

Version 1.2.0beta5 [August 8, 2001]
  Revised contrib/gregbook
  Revised makefile.gcmmx
  Revised pnggccrd.c to conditionally compile some thread-unsafe code only
    when PNG_THREAD_UNSAFE_OK is defined.
  Added tests to prevent pngwutil.c from writing a bKGD or tRNS chunk with
    value exceeding 2^bit_depth-1
  Revised makefile.sgi and makefile.sggcc
  Replaced calls to fprintf(stderr,...) with png_warning() in pnggccrd.c
  Removed restriction that do_invert_mono only operate on 1-bit opaque files

Version 1.2.0 [September 1, 2001]
  Changed a png_warning() to png_debug() in pnggccrd.c
  Fixed contrib/gregbook/rpng-x.c, rpng2-x.c to avoid crash with XFreeGC().

Version 1.2.1beta1 [October 19, 2001]
  Revised makefile.std in contrib/pngminus
  Include background_1 in png_struct regardless of gamma support.
  Revised makefile.netbsd and makefile.macosx, added makefile.darwin.
  Revised example.c to provide more details about using row_callback().

Version 1.2.1beta2 [October 25, 2001]
  Added type cast to each NULL appearing in a function call, except for
    WINCE functions.
  Added makefile.so9.

Version 1.2.1beta3 [October 27, 2001]
  Removed type casts from all NULLs.
  Simplified png_create_struct_2().

Version 1.2.1beta4 [November 7, 2001]
  Revised png_create_info_struct() and png_creat_struct_2().
  Added error message if png_write_info() was omitted.
  Type cast NULLs appearing in function calls when _NO_PROTO or
    PNG_TYPECAST_NULL is defined.

Version 1.2.1rc1 [November 24, 2001]
  Type cast NULLs appearing in function calls except when PNG_NO_TYPECAST_NULL
    is defined.
  Changed typecast of "size" argument to png_size_t in pngmem.c calls to
    the user malloc_fn, to agree with the prototype in png.h
  Added a pop/push operation to pnggccrd.c, to preserve Eflag (Maxim Sobolev)
  Updated makefile.sgi to recognize LIBPATH and INCPATH.
  Updated various makefiles so "make clean" does not remove previous major
    version of the shared library.

Version 1.2.1rc2 [December 4, 2001]
  Always allocate 256-entry internal palette, hist, and trans arrays, to
    avoid out-of-bounds memory reference caused by invalid PNG datastreams.
  Added a check for prefix_length > data_length in iCCP chunk handler.

Version 1.2.1 [December 7, 2001]
  None.

Version 1.2.2beta1 [February 22, 2002]
  Fixed a bug with reading the length of iCCP profiles (Larry Reeves).
  Revised makefile.linux, makefile.gcmmx, and makefile.sgi to generate
    libpng.a, libpng12.so (not libpng.so.3), and libpng12/png.h
  Revised makefile.darwin to remove "-undefined suppress" option.
  Added checks for gamma and chromaticity values over 21474.83, which exceed
    the limit for PNG unsigned 32-bit integers when encoded.
  Revised calls to png_create_read_struct() and png_create_write_struct()
    for simpler debugging.
  Revised png_zalloc() so zlib handles errors (uses PNG_FLAG_MALLOC_NULL_MEM_OK)

Version 1.2.2beta2 [February 23, 2002]
  Check chunk_length and idat_size for invalid (over PNG_MAX_UINT) lengths.
  Check for invalid image dimensions in png_get_IHDR.
  Added missing "fi;" in the install target of the SGI makefiles.
  Added install-static to all makefiles that make shared libraries.
  Always do gamma compensation when image is partially transparent.

Version 1.2.2beta3 [March 7, 2002]
  Compute background.gray and background_1.gray even when color_type is RGB
    in case image gets reduced to gray later.
  Modified shared-library makefiles to install pkgconfig/libpngNN.pc.
  Export (with PNGAPI) png_zalloc, png_zfree, and png_handle_as_unknown
  Removed unused png_write_destroy_info prototype from png.h
  Eliminated incorrect use of width_mmx from pnggccrd.c in pixel_bytes == 8 case
  Added install-shared target to all makefiles that make shared libraries.
  Stopped a double free of palette, hist, and trans when not using free_me.
  Added makefile.32sunu for Sun Ultra 32 and makefile.64sunu for Sun Ultra 64.

Version 1.2.2beta4 [March 8, 2002]
  Compute background.gray and background_1.gray even when color_type is RGB
    in case image gets reduced to gray later (Jason Summers).
  Relocated a misplaced /bin/rm in the "install-shared" makefile targets
  Added PNG_1_0_X macro which can be used to build a 1.0.x-compatible library.

Version 1.2.2beta5 [March 26, 2002]
  Added missing PNGAPI to several function definitions.
  Check for invalid bit_depth or color_type in png_get_IHDR(), and
    check for missing PLTE or IHDR in png_push_read_chunk() (Matthias Clasen).
  Revised iTXt support to accept NULL for lang and lang_key.
  Compute gamma for color components of background even when color_type is gray.
  Changed "()" to "{}" in scripts/libpng.pc.in.
  Revised makefiles to put png.h and pngconf.h only in $prefix/include/libpngNN
  Revised makefiles to make symlink to libpng.so.NN in addition to libpngNN.so

Version 1.2.2beta6 [March 31, 2002]

Version 1.0.13beta1 [March 31, 2002]
  Prevent png_zalloc() from trying to memset memory that it failed to acquire.
  Add typecasts of PNG_MAX_UINT in pngset_cHRM_fixed() (Matt Holgate).
  Ensure that the right function (user or default) is used to free the
    png_struct after an error in png_create_read_struct_2().

Version 1.2.2rc1 [April 7, 2002]

Version 1.0.13rc1 [April 7, 2002]
  Save the ebx register in pnggccrd.c (Sami Farin)
  Add "mem_ptr = png_ptr->mem_ptr" in png_destroy_write_struct() (Paul Gardner).
  Updated makefiles to put headers in include/libpng and remove old include/*.h.

Version 1.2.2 [April 15, 2002]

Version 1.0.13 [April 15, 2002]
  Revised description of png_set_filter() in libpng.3/libpng.txt.
  Revised makefile.netbsd and added makefile.neNNbsd and makefile.freebsd

Version 1.0.13patch01 [April 17, 2002]

Version 1.2.2patch01 [April 17, 2002]
  Changed ${PNGMAJ}.${PNGVER} bug to ${PNGVER} in makefile.sgi and
    makefile.sggcc
  Fixed VER -> PNGVER typo in makefile.macosx and added install-static to
    install
  Added install: target to makefile.32sunu and makefile.64sunu

Version 1.0.13patch03 [April 18, 2002]

Version 1.2.2patch03 [April 18, 2002]
  Revised 15 makefiles to link libpng.a to libpngNN.a and the include libpng
  subdirectory to libpngNN subdirectory without the full pathname.
  Moved generation of libpng.pc from "install" to "all" in 15 makefiles.

Version 1.2.3rc1 [April 28, 2002]
  Added install-man target to 15 makefiles (Dimitri Papadopolous-Orfanos).
  Added $(DESTDIR) feature to 24 makefiles (Tim Mooney)
  Fixed bug with $prefix, should be $(prefix) in makefile.hpux.
  Updated cygwin-specific portion of pngconf.h and revised makefile.cygwin
  Added a link from libpngNN.pc to libpng.pc in 15 makefiles.
  Added links from include/libpngNN/*.h to include/*.h in 24 makefiles.
  Revised makefile.darwin to make relative links without full pathname.
  Added setjmp() at the end of png_create_*_struct_2() in case user forgets
    to put one in their application.
  Restored png_zalloc() and png_zfree() prototypes to version 1.2.1 and
    removed them from module definition files.

Version 1.2.3rc2 [May 1, 2002]
  Fixed bug in reporting number of channels in pngget.c and pngset.c,
    that was introduced in version 1.2.2beta5.
  Exported png_zalloc(), png_zfree(), png_default_read(), png_default_write(),
    png_default_flush(), and png_push_fill_buffer() and included them in
    module definition files.
  Added "libpng.pc" dependency to the "install-shared" target in 15 makefiles.

Version 1.2.3rc3 [May 1, 2002]
  Revised prototype for png_default_flush()
  Remove old libpng.pc and libpngNN.pc before installing new ones.

Version 1.2.3rc4 [May 2, 2002]
  Typos in *.def files (png_default_read|write -> png_default_read|write_data)
  In makefiles, changed rm libpng.NN.pc to rm libpngNN.pc
  Added libpng-config and libpngNN-config and modified makefiles to install
    them.
  Changed $(MANPATH) to $(DESTDIR)$(MANPATH) in makefiles
  Added "Win32 DLL VB" configuration to projects/msvc/libpng.dsp

Version 1.2.3rc5 [May 11, 2002]
  Changed "error" and "message" in prototypes to "error_message" and
    "warning_message" to avoid namespace conflict.
  Revised 15 makefiles to build libpng-config from libpng-config-*.in
  Once more restored png_zalloc and png_zfree to regular nonexported form.
  Restored png_default_read|write_data, png_default_flush, png_read_fill_buffer
    to nonexported form, but with PNGAPI, and removed them from module def
    files.

Version 1.2.3rc6 [May 14, 2002]
  Removed "PNGAPI" from png_zalloc() and png_zfree() in png.c
  Changed "Gz" to "Gd" in projects/msvc/libpng.dsp and zlib.dsp.
  Removed leftover libpng-config "sed" script from four makefiles.
  Revised libpng-config creating script in 16 makefiles.

Version 1.2.3 [May 22, 2002]
  Revised libpng-config target in makefile.cygwin.
  Removed description of png_set_mem_fn() from documentation.
  Revised makefile.freebsd.
  Minor cosmetic changes to 15 makefiles, e.g., $(DI) = $(DESTDIR)/$(INCDIR).
  Revised projects/msvc/README.txt
  Changed -lpng to -lpngNN in LDFLAGS in several makefiles.

Version 1.2.4beta1 [May 24, 2002]
  Added libpng.pc and libpng-config to "all:" target in 16 makefiles.
  Fixed bug in 16 makefiles: $(DESTDIR)/$(LIBPATH) to $(DESTDIR)$(LIBPATH)
  Added missing "\" before closing double quote in makefile.gcmmx.
  Plugged various memory leaks; added png_malloc_warn() and png_set_text_2()
    functions.

Version 1.2.4beta2 [June 25, 2002]
  Plugged memory leak of png_ptr->current_text (Matt Holgate).
  Check for buffer overflow before reading CRC in pngpread.c (Warwick Allison)
  Added -soname to the loader flags in makefile.dec, makefile.sgi, and
    makefile.sggcc.
  Added "test-installed" target to makefile.linux, makefile.gcmmx,
    makefile.sgi, and makefile.sggcc.

Version 1.2.4beta3 [June 28, 2002]
  Plugged memory leak of row_buf in pngtest.c when there is a png_error().
  Detect buffer overflow in pngpread.c when IDAT is corrupted with extra data.
  Added "test-installed" target to makefile.32sunu, makefile.64sunu,
    makefile.beos, makefile.darwin, makefile.dec, makefile.macosx,
    makefile.solaris, makefile.hpux, makefile.hpgcc, and makefile.so9.

Version 1.2.4rc1 and 1.0.14rc1 [July 2, 2002]
  Added "test-installed" target to makefile.cygwin and makefile.sco.
  Revised pnggccrd.c to be able to back out version 1.0.x via PNG_1_0_X macro.

Version 1.2.4 and 1.0.14 [July 8, 2002]
  Changed png_warning() to png_error() when width is too large to process.

Version 1.2.4patch01 [July 20, 2002]
  Revised makefile.cygwin to use DLL number 12 instead of 13.

Version 1.2.5beta1 [August 6, 2002]
  Added code to contrib/gregbook/readpng2.c to ignore unused chunks.
  Replaced toucan.png in contrib/gregbook (it has been corrupt since 1.0.11)
  Removed some stray *.o files from contrib/gregbook.
  Changed png_error() to png_warning() about "Too much data" in pngpread.c
    and about "Extra compressed data" in pngrutil.c.
  Prevent png_ptr->pass from exceeding 7 in png_push_finish_row().
  Updated makefile.hpgcc
  Updated png.c and pnggccrd.c handling of return from png_mmx_support()

Version 1.2.5beta2 [August 15, 2002]
  Only issue png_warning() about "Too much data" in pngpread.c when avail_in
    is nonzero.
  Updated makefiles to install a separate libpng.so.3 with its own rpath.

Version 1.2.5rc1 and 1.0.15rc1 [August 24, 2002]
  Revised makefiles to not remove previous minor versions of shared libraries.

Version 1.2.5rc2 and 1.0.15rc2 [September 16, 2002]
  Revised 13 makefiles to remove "-lz" and "-L$(ZLIBLIB)", etc., from shared
    library loader directive.
  Added missing "$OBJSDLL" line to makefile.gcmmx.
  Added missing "; fi" to makefile.32sunu.

Version 1.2.5rc3 and 1.0.15rc3 [September 18, 2002]
  Revised libpng-config script.

Version 1.2.5 and 1.0.15 [October 3, 2002]
  Revised makefile.macosx, makefile.darwin, makefile.hpgcc, and makefile.hpux,
    and makefile.aix.
  Relocated two misplaced PNGAPI lines in pngtest.c

Version 1.2.6beta1 [October 22, 2002]
  Commented out warning about uninitialized mmx_support in pnggccrd.c.
  Changed "IBMCPP__" flag to "__IBMCPP__" in pngconf.h.
  Relocated two more misplaced PNGAPI lines in pngtest.c
  Fixed memory overrun bug in png_do_read_filler() with 16-bit datastreams,
    introduced in version 1.0.2.
  Revised makefile.macosx, makefile.dec, makefile.aix, and makefile.32sunu.

Version 1.2.6beta2 [November 1, 2002]
  Added libpng-config "--ldopts" output.
  Added "AR=ar" and "ARFLAGS=rc" and changed "ar rc" to "$(AR) $(ARFLAGS)"
    in makefiles.

Version 1.2.6beta3 [July 18, 2004]
  Reverted makefile changes from version 1.2.6beta2 and some of the changes
    from version 1.2.6beta1; these will be postponed until version 1.2.7.
    Version 1.2.6 is going to be a simple bugfix release.
  Changed the one instance of "ln -sf" to "ln -f -s" in each Sun makefile.
  Fixed potential overrun in pngerror.c by using strncpy instead of memcpy.
  Added "#!/bin/sh" at the top of configure, for recognition of the
    'x' flag under Cygwin (Cosmin).
  Optimized vacuous tests that silence compiler warnings, in png.c (Cosmin).
  Added support for PNG_USER_CONFIG, in pngconf.h (Cosmin).
  Fixed the special memory handler for Borland C under DOS, in pngmem.c
    (Cosmin).
  Removed some spurious assignments in pngrutil.c (Cosmin).
  Replaced 65536 with 65536L, and 0xffff with 0xffffL, to silence warnings
    on 16-bit platforms (Cosmin).
  Enclosed shift op expressions in parentheses, to silence warnings (Cosmin).
  Used proper type png_fixed_point, to avoid problems on 16-bit platforms,
    in png_handle_sRGB() (Cosmin).
  Added compression_type to png_struct, and optimized the window size
    inside the deflate stream (Cosmin).
  Fixed definition of isnonalpha(), in pngerror.c and pngrutil.c (Cosmin).
  Fixed handling of unknown chunks that come after IDAT (Cosmin).
  Allowed png_error() and png_warning() to work even if png_ptr == NULL
    (Cosmin).
  Replaced row_info->rowbytes with row_bytes in png_write_find_filter()
    (Cosmin).
  Fixed definition of PNG_LIBPNG_VER_DLLNUM (Simon-Pierre).
  Used PNG_LIBPNG_VER and PNG_LIBPNG_VER_STRING instead of the hardcoded
    values in png.c (Simon-Pierre, Cosmin).
  Initialized png_libpng_ver[] with PNG_LIBPNG_VER_STRING (Simon-Pierre).
  Replaced PNG_LIBPNG_VER_MAJOR with PNG_LIBPNG_VER_DLLNUM in png.rc
    (Simon-Pierre).
  Moved the definition of PNG_HEADER_VERSION_STRING near the definitions
    of the other PNG_LIBPNG_VER_... symbols in png.h (Cosmin).
  Relocated #ifndef PNGAPI guards in pngconf.h (Simon-Pierre, Cosmin).
  Updated scripts/makefile.vc(a)win32 (Cosmin).
  Updated the MSVC project (Simon-Pierre, Cosmin).
  Updated the Borland C++ Builder project (Cosmin).
  Avoided access to asm_flags in pngvcrd.c, if PNG_1_0_X is defined (Cosmin).
  Commented out warning about uninitialized mmx_support in pngvcrd.c (Cosmin).
  Removed scripts/makefile.bd32 and scripts/pngdef.pas (Cosmin).
  Added extra guard around inclusion of Turbo C memory headers, in pngconf.h
    (Cosmin).
  Renamed projects/msvc/ to projects/visualc6/, and projects/borland/ to
    projects/cbuilder5/ (Cosmin).
  Moved projects/visualc6/png32ms.def to scripts/pngw32.def,
    and projects/visualc6/png.rc to scripts/pngw32.rc (Cosmin).
  Added projects/visualc6/pngtest.dsp; removed contrib/msvctest/ (Cosmin).
  Changed line endings to DOS style in cbuilder5 and visualc6 files, even
    in the tar.* distributions (Cosmin).
  Updated contrib/visupng/VisualPng.dsp (Cosmin).
  Updated contrib/visupng/cexcept.h to version 2.0.0 (Cosmin).
  Added a separate distribution with "configure" and supporting files (Junichi).

Version 1.2.6beta4 [July 28, 2004]
  Added user ability to change png_size_t via a PNG_SIZE_T macro.
  Added png_sizeof() and png_convert_size() functions.
  Added PNG_SIZE_MAX (maximum value of a png_size_t variable.
  Added check in png_malloc_default() for (size_t)size != (png_uint_32)size
    which would indicate an overflow.
  Changed sPLT failure action from png_error to png_warning and abandon chunk.
  Changed sCAL and iCCP failures from png_error to png_warning and abandon.
  Added png_get_uint_31(png_ptr, buf) function.
  Added PNG_UINT_32_MAX macro.
  Renamed PNG_MAX_UINT to PNG_UINT_31_MAX.
  Made png_zalloc() issue a png_warning and return NULL on potential
    overflow.
  Turn on PNG_NO_ZALLOC_ZERO by default in version 1.2.x
  Revised "clobber list" in pnggccrd.c so it will compile under gcc-3.4.
  Revised Borland portion of png_malloc() to return NULL or issue
    png_error() according to setting of PNG_FLAG_MALLOC_NULL_MEM_OK.
  Added PNG_NO_SEQUENTIAL_READ_SUPPORTED macro to conditionally remove
    sequential read support.
  Added some "#if PNG_WRITE_SUPPORTED" blocks.
  Added #ifdef to remove some redundancy in png_malloc_default().
  Use png_malloc instead of png_zalloc to allocate the pallete.

Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
  Fixed buffer overflow vulnerability (CVE-2004-0597) in png_handle_tRNS().
  Fixed NULL dereference vulnerability (CVE-2004-0598) in png_handle_iCCP().
  Fixed integer overflow vulnerability (CVE-2004-0599) in png_read_png().
  Fixed some harmless bugs in png_handle_sBIT, etc, that would cause
    duplicate chunk types to go undetected.
  Fixed some timestamps in the -config version
  Rearranged order of processing of color types in png_handle_tRNS().
  Added ROWBYTES macro to calculate rowbytes without integer overflow.
  Updated makefile.darwin and removed makefile.macosx from scripts directory.
  Imposed default one million column, one-million row limits on the image
    dimensions, and added png_set_user_limits() function to override them.
  Revised use of PNG_SET_USER_LIMITS_SUPPORTED macro.
  Fixed wrong cast of returns from png_get_user_width|height_max().
  Changed some "keep the compiler happy" from empty statements to returns,
  Revised libpng.txt to remove 1.2.x stuff from the 1.0.x distribution

Version 1.0.16rc2 and 1.2.6rc2 [August 7, 2004]
  Revised makefile.darwin and makefile.solaris.  Removed makefile.macosx.
  Revised pngtest's png_debug_malloc() to use png_malloc() instead of
    png_malloc_default() which is not supposed to be exported.
  Fixed off-by-one error in one of the conversions to PNG_ROWBYTES() in
    pngpread.c.  Bug was introduced in 1.2.6rc1.
  Fixed bug in RGB to RGBX transformation introduced in 1.2.6rc1.
  Fixed old bug in RGB to Gray transformation.
  Fixed problem with 64-bit compilers by casting arguments to abs()
    to png_int_32.
  Changed "ln -sf" to "ln -f -s" in three makefiles (solaris, sco, so9).
  Changed "HANDLE_CHUNK_*" to "PNG_HANDLE_CHUNK_*" (Cosmin)
  Added "-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGMAJ)" to 15 *NIX makefiles.
  Added code to update the row_info->colortype in png_do_read_filler() (MSB).

Version 1.0.16rc3 and 1.2.6rc3 [August 9, 2004]
  Eliminated use of "abs()" in testing cHRM and gAMA values, to avoid
    trouble with some 64-bit compilers.  Created PNG_OUT_OF_RANGE() macro.
  Revised documentation of png_set_keep_unknown_chunks().
  Check handle_as_unknown status in pngpread.c, as in pngread.c previously.
  Moved  "PNG_HANDLE_CHUNK_*" macros out of PNG_INTERNAL section of png.h
  Added "rim" definitions for CONST4 and CONST6 in pnggccrd.c

Version 1.0.16rc4 and 1.2.6rc4 [August 10, 2004]
  Fixed mistake in pngtest.c introduced in 1.2.6rc2 (declaration of
    "pinfo" was out of place).

Version 1.0.16rc5 and 1.2.6rc5 [August 10, 2004]
  Moved  "PNG_HANDLE_CHUNK_*" macros out of PNG_ASSEMBLER_CODE_SUPPORTED
    section of png.h where they were inadvertently placed in version rc3.

Version 1.2.6 and 1.0.16 [August 15, 2004]
  Revised pngtest so memory allocation testing is only done when PNG_DEBUG==1.

Version 1.2.7beta1 [August 26, 2004]
  Removed unused pngasmrd.h file.
  Removed references to uu.net for archived files.  Added references to
    PNG Spec (second edition) and the PNG ISO/IEC Standard.
  Added "test-dd" target in 15 makefiles, to run pngtest in DESTDIR.
  Fixed bug with "optimized window size" in the IDAT datastream, that
    causes libpng to write PNG files with incorrect zlib header bytes.

Version 1.2.7beta2 [August 28, 2004]
  Fixed bug with sCAL chunk and big-endian machines (David Munro).
  Undid new code added in 1.2.6rc2 to update the color_type in
    png_set_filler().
  Added png_set_add_alpha() that updates color type.

Version 1.0.17rc1 and 1.2.7rc1 [September 4, 2004]
  Revised png_set_strip_filler() to not remove alpha if color_type has alpha.

Version 1.2.7 and 1.0.17 [September 12, 2004]
  Added makefile.hp64
  Changed projects/msvc/png32ms.def to scripts/png32ms.def in makefile.cygwin

Version 1.2.8beta1 [November 1, 2004]
  Fixed bug in png_text_compress() that would fail to complete a large block.
  Fixed bug, introduced in libpng-1.2.7, that overruns a buffer during
    strip alpha operation in png_do_strip_filler().
  Added PNG_1_2_X definition in pngconf.h
  Use #ifdef to comment out png_info_init in png.c and png_read_init in
    pngread.c (as of 1.3.0)

Version 1.2.8beta2 [November 2, 2004]
  Reduce color_type to a nonalpha type after strip alpha operation in
    png_do_strip_filler().

Version 1.2.8beta3 [November 3, 2004]
  Revised definitions of PNG_MAX_UINT_32, PNG_MAX_SIZE, and PNG_MAXSUM

Version 1.2.8beta4 [November 12, 2004]
  Fixed (again) definition of PNG_LIBPNG_VER_DLLNUM in png.h (Cosmin).
  Added PNG_LIBPNG_BUILD_PRIVATE in png.h (Cosmin).
  Set png_ptr->zstream.data_type to Z_BINARY, to avoid unnecessary detection
    of data type in deflate (Cosmin).
  Deprecated but continue to support SPECIALBUILD and PRIVATEBUILD in favor of
    PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.

Version 1.2.8beta5 [November 20, 2004]
  Use png_ptr->flags instead of png_ptr->transformations to pass
    PNG_STRIP_ALPHA info to png_do_strip_filler(), to preserve ABI
    compatibility.
  Revised handling of SPECIALBUILD, PRIVATEBUILD,
    PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.

Version 1.2.8rc1 [November 24, 2004]
  Moved handling of BUILD macros from pngconf.h to png.h
  Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
    omitted from beta5.
  Revised scripts/pngw32.rc
  Despammed mailing addresses by masking "@" with "at".
  Inadvertently installed a supposedly faster test version of pngrutil.c

Version 1.2.8rc2 [November 26, 2004]
  Added two missing "\" in png.h
  Change tests in pngread.c and pngpread.c to
    if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
       png_do_read_transformations(png_ptr);

Version 1.2.8rc3 [November 28, 2004]
  Reverted pngrutil.c to version libpng-1.2.8beta5.
  Added scripts/makefile.elf with supporting code in pngconf.h for symbol
    versioning (John Bowler).

Version 1.2.8rc4 [November 29, 2004]
  Added projects/visualc7 (Simon-pierre).

Version 1.2.8rc5 [November 29, 2004]
  Fixed new typo in scripts/pngw32.rc

Version 1.2.8 [December 3, 2004]
  Removed projects/visualc7, added projects/visualc71.

Version 1.2.9beta1 [February 21, 2006]
  Initialized some structure members in pngwutil.c to avoid gcc-4.0.0 complaints
  Revised man page and libpng.txt to make it clear that one should not call
    png_read_end or png_write_end after png_read_png or png_write_png.
  Updated references to png-mng-implement mailing list.
  Fixed an incorrect typecast in pngrutil.c
  Added PNG_NO_READ_SUPPORTED conditional for making a write-only library.
  Added PNG_NO_WRITE_INTERLACING_SUPPORTED conditional.
  Optimized alpha-inversion loops in pngwtran.c
  Moved test for nonzero gamma outside of png_build_gamma_table() in pngrtran.c
  Make sure num_trans is <= 256 before copying data in png_set_tRNS().
  Make sure num_palette is <= 256 before copying data in png_set_PLTE().
  Interchanged order of write_swap_alpha and write_invert_alpha transforms.
  Added parentheses in the definition of PNG_LIBPNG_BUILD_TYPE (Cosmin).
  Optimized zlib window flag (CINFO) in contrib/pngsuite/*.png (Cosmin).
  Updated scripts/makefile.bc32 for Borland C++ 5.6 (Cosmin).
  Exported png_get_uint_32, png_save_uint_32, png_get_uint_16, png_save_uint_16,
    png_get_int_32, png_save_int_32, png_get_uint_31 (Cosmin).
  Added type cast (png_byte) in png_write_sCAL() (Cosmin).
  Fixed scripts/makefile.cygwin (Christian Biesinger, Cosmin).
  Default iTXt support was inadvertently enabled.

Version 1.2.9beta2 [February 21, 2006]
  Check for png_rgb_to_gray and png_gray_to_rgb read transformations before
    checking for png_read_dither in pngrtran.c
  Revised checking of chromaticity limits to accommodate extended RGB
    colorspace (John Denker).
  Changed line endings in some of the project files to CRLF, even in the
    "Unix" tar distributions (Cosmin).
  Made png_get_int_32 and png_save_int_32 always available (Cosmin).
  Updated scripts/pngos2.def, scripts/pngw32.def and projects/wince/png32ce.def
    with the newly exported functions.
  Eliminated distributions without the "configure" script.
  Updated INSTALL instructions.

Version 1.2.9beta3 [February 24, 2006]
  Fixed CRCRLF line endings in contrib/visupng/VisualPng.dsp
  Made libpng.pc respect EXEC_PREFIX (D. P. Kreil, J. Bowler)
  Removed reference to pngasmrd.h from Makefile.am
  Renamed CHANGES to ChangeLog.
  Renamed LICENSE to COPYING.
  Renamed ANNOUNCE to NEWS.
  Created AUTHORS file.

Version 1.2.9beta4 [March 3, 2006]
  Changed definition of PKGCONFIG from $prefix/lib to $libdir in configure.ac
  Reverted to filenames LICENSE and ANNOUNCE; removed AUTHORS and COPYING.
  Removed newline from the end of some error and warning messages.
  Removed test for sqrt() from configure.ac and configure.
  Made swap tables in pngtrans.c PNG_CONST (Carlo Bramix).
  Disabled default iTXt support that was inadvertently enabled in
    libpng-1.2.9beta1.
  Added "OS2" to list of systems that don't need underscores, in pnggccrd.c
  Removed libpng version and date from *.c files.

Version 1.2.9beta5 [March 4, 2006]
  Removed trailing blanks from source files.
  Put version and date of latest change in each source file, and changed
    copyright year accordingly.
  More cleanup of configure.ac, Makefile.am, and associated scripts.
  Restored scripts/makefile.elf which was inadvertently deleted.

Version 1.2.9beta6 [March 6, 2006]
  Fixed typo (RELEASE) in configuration files.

Version 1.2.9beta7 [March 7, 2006]
  Removed libpng.vers and libpng.sym from libpng12_la_SOURCES in Makefile.am
  Fixed inconsistent #ifdef's around png_sig_bytes() and png_set_sCAL_s()
    in png.h.
  Updated makefile.elf as suggested by debian.
  Made cosmetic changes to some makefiles, adding LN_SF and other macros.
  Made some makefiles accept "exec_prefix".

Version 1.2.9beta8 [March 9, 2006]
  Fixed some "#if defined (..." which should be "#if defined(..."
    Bug introduced in libpng-1.2.8.
  Fixed inconsistency in definition of png_default_read_data()
  Restored blank that was lost from makefile.sggcc "clean" target in beta7.
  Revised calculation of "current" and "major" for irix in ltmain.sh
  Changed "mkdir" to "MKDIR_P" in some makefiles.
  Separated PNG_EXPAND and PNG_EXPAND_tRNS.
  Added png_set_expand_gray_1_2_4_to_8() and deprecated
    png_set_gray_1_2_4_to_8() which also expands tRNS to alpha.

Version 1.2.9beta9 [March 10, 2006]
  Include "config.h" in pngconf.h when available.
  Added some checks for NULL png_ptr or NULL info_ptr (timeless)

Version 1.2.9beta10 [March 20, 2006]
  Removed extra CR from contrib/visualpng/VisualPng.dsw (Cosmin)
  Made pnggccrd.c PIC-compliant (Christian Aichinger).
  Added makefile.mingw (Wolfgang Glas).
  Revised pngconf.h MMX checking.

Version 1.2.9beta11 [March 22, 2006]
  Fixed out-of-order declaration in pngwrite.c that was introduced in beta9
  Simplified some makefiles by using LIBSO, LIBSOMAJ, and LIBSOVER macros.

Version 1.2.9rc1 [March 31, 2006]
  Defined PNG_USER_PRIVATEBUILD when including "pngusr.h" (Cosmin).
  Removed nonsensical assertion check from pngtest.c (Cosmin).

Version 1.2.9 [April 14, 2006]
  Revised makefile.beos and added "none" selector in ltmain.sh

Version 1.2.10beta1 [April 15, 2006]
  Renamed "config.h" to "png_conf.h" and revised Makefile.am to add
    -DPNG_BUILDING_LIBPNG to compile directive, and modified pngconf.h
    to include png_conf.h only when PNG_BUILDING_LIBPNG is defined.

Version 1.2.10beta2 [April 15, 2006]
  Manually updated Makefile.in and configure.  Changed png_conf.h.in
    back to config.h.

Version 1.2.10beta3 [April 15, 2006]
  Change png_conf.h back to config.h in pngconf.h.

Version 1.2.10beta4 [April 16, 2006]
  Change PNG_BUILDING_LIBPNG to PNG_CONFIGURE_LIBPNG in config/Makefile*.

Version 1.2.10beta5 [April 16, 2006]
  Added a configure check for compiling assembler code in pnggccrd.c

Version 1.2.10beta6 [April 17, 2006]
  Revised the configure check for pnggccrd.c
  Moved -DPNG_CONFIGURE_LIBPNG into @LIBPNG_DEFINES@
  Added @LIBPNG_DEFINES@ to arguments when building libpng.sym

Version 1.2.10beta7 [April 18, 2006]
  Change "exec_prefix=$prefix" to "exec_prefix=$(prefix)" in makefiles.

Version 1.2.10rc1 [April 19, 2006]
  Ensure pngconf.h doesn't define both PNG_USE_PNGGCCRD and PNG_USE_PNGVCRD
  Fixed "LN_FS" typo in makefile.sco and makefile.solaris.

Version 1.2.10rc2 [April 20, 2006]
  Added a backslash between -DPNG_CONFIGURE_LIBPNG and -DPNG_NO_ASSEMBLER_CODE
   in configure.ac and configure
  Made the configure warning about versioned symbols less arrogant.

Version 1.2.10rc3 [April 21, 2006]
  Added a note in libpng.txt that png_set_sig_bytes(8) can be used when
    writing an embedded PNG without the 8-byte signature.
  Revised makefiles and configure to avoid making links to libpng.so.*

Version 1.2.10 [April 23, 2006]
  Reverted configure to "rc2" state.

Version 1.2.11beta1 [May 31, 2006]
  scripts/libpng.pc.in contained "configure" style version info and would
    not work with makefiles.
  The shared-library makefiles were linking to libpng.so.0 instead of
    libpng.so.3 compatibility as the library.

Version 1.2.11beta2 [June 2, 2006]
  Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
    buffer overflow.
  Fixed bug in example.c (png_set_palette_rgb -> png_set_palette_to_rgb)

Version 1.2.11beta3 [June 5, 2006]
  Prepended "#! /bin/sh" to ltmail.sh and contrib/pngminus/*.sh (Cosmin).
  Removed the accidental leftover Makefile.in~ (Cosmin).
  Avoided potential buffer overflow and optimized buffer in
    png_write_sCAL(), png_write_sCAL_s() (Cosmin).
  Removed the include directories and libraries from CFLAGS and LDFLAGS
    in scripts/makefile.gcc (Nelson A. de Oliveira, Cosmin).

Version 1.2.11beta4 [June 6, 2006]
  Allow zero-length IDAT chunks after the entire zlib datastream, but not
    after another intervening chunk type.

Version 1.0.19rc1, 1.2.11rc1 [June 13, 2006]
  Deleted extraneous square brackets from [config.h] in configure.ac

Version 1.0.19rc2, 1.2.11rc2 [June 14, 2006]
  Added prototypes for PNG_INCH_CONVERSIONS functions to png.h
  Revised INSTALL and autogen.sh
  Fixed typo in several makefiles (-W1 should be -Wl)
  Added typedef for png_int_32 and png_uint_32 on 64-bit systems.

Version 1.0.19rc3, 1.2.11rc3 [June 15, 2006]
  Removed the new typedefs for 64-bit systems (delay until version 1.4.0)
  Added one zero element to png_gamma_shift[] array in pngrtran.c to avoid
    reading out of bounds.

Version 1.0.19rc4, 1.2.11rc4 [June 15, 2006]
  Really removed the new typedefs for 64-bit systems.

Version 1.0.19rc5, 1.2.11rc5 [June 22, 2006]
  Removed png_sig_bytes entry from scripts/pngw32.def

Version 1.0.19, 1.2.11 [June 26, 2006]
  None.

Version 1.0.20, 1.2.12 [June 27, 2006]
  Really increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
    buffer overflow.

Version 1.2.13beta1 [October 2, 2006]
  Removed AC_FUNC_MALLOC from configure.ac
  Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
  Change "logical" to "bitwise" throughout documentation.
  Detect and fix attempt to write wrong iCCP profile length (CVE-2006-7244)

Version 1.0.21, 1.2.13 [November 14, 2006]
  Fix potential buffer overflow in sPLT chunk handler.
  Fix Makefile.am to not try to link to noexistent files.
  Check all exported functions for NULL png_ptr.

Version 1.2.14beta1 [November 17, 2006]
  Relocated three misplaced tests for NULL png_ptr.
  Built Makefile.in with automake-1.9.6 instead of 1.9.2.
  Build configure with autoconf-2.60 instead of 2.59

Version 1.2.14beta2 [November 17, 2006]
  Added some typecasts in png_zalloc().

Version 1.2.14rc1 [November 20, 2006]
  Changed "strtod" to "png_strtod" in pngrutil.c

Version 1.0.22, 1.2.14    [November 27, 2006]
  Added missing "$(srcdir)" in Makefile.am and Makefile.in

Version 1.2.15beta1 [December 3, 2006]
  Generated configure with autoconf-2.61 instead of 2.60
  Revised configure.ac to update libpng.pc and libpng-config.

Version 1.2.15beta2 [December 3, 2006]
  Always export MMX asm functions, just stubs if not building pnggccrd.c

Version 1.2.15beta3 [December 4, 2006]
  Add "png_bytep" typecast to profile while calculating length in pngwutil.c

Version 1.2.15beta4 [December 7, 2006]
  Added scripts/CMakeLists.txt
  Changed PNG_NO_ASSEMBLER_CODE to PNG_NO_MMX_CODE in scripts, like 1.4.0beta

Version 1.2.15beta5 [December 7, 2006]
  Changed some instances of PNG_ASSEMBLER_* to PNG_MMX_* in pnggccrd.c
  Revised scripts/CMakeLists.txt

Version 1.2.15beta6 [December 13, 2006]
  Revised scripts/CMakeLists.txt and configure.ac

Version 1.2.15rc1 [December 18, 2006]
  Revised scripts/CMakeLists.txt

Version 1.2.15rc2 [December 21, 2006]
  Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
  Added scripts/makefile.nommx

Version 1.2.15rc3 [December 25, 2006]
  Fixed shared library numbering error that was introduced in 1.2.15beta6.

Version 1.2.15rc4 [December 27, 2006]
  Fixed handling of rgb_to_gray when png_ptr->color.gray isn't set.

Version 1.2.15rc5 [December 31, 2006]
  Revised handling of rgb_to_gray.

Version 1.2.15 [January 5, 2007]
  Added some (unsigned long) typecasts in pngtest.c to avoid printing errors.

Version 1.2.16beta1 [January 6, 2007]
  Fix bugs in makefile.nommx

Version 1.2.16beta2 [January 16, 2007]
  Revised scripts/CMakeLists.txt

Version 1.2.16 [January 31, 2007]
  No changes.

Version 1.2.17beta1 [March 6, 2007]
  Revised scripts/CMakeLists.txt to install both shared and static libraries.
  Deleted a redundant line from pngset.c.

Version 1.2.17beta2 [April 26, 2007]
  Relocated misplaced test for png_ptr == NULL in pngpread.c
  Change "==" to "&" for testing PNG_RGB_TO_GRAY_ERR & PNG_RGB_TO_GRAY_WARN
    flags.
  Changed remaining instances of PNG_ASSEMBLER_* to PNG_MMX_*
  Added pngerror() when write_IHDR fails in deflateInit2().
  Added "const" to some array declarations.
  Mention examples of libpng usage in the libpng*.txt and libpng.3 documents.

Version 1.2.17rc1 [May 4, 2007]
  No changes.

Version 1.2.17rc2 [May 8, 2007]
  Moved several PNG_HAVE_* macros out of PNG_INTERNAL because applications
    calling set_unknown_chunk_location() need them.
  Changed transformation flag from PNG_EXPAND_tRNS to PNG_EXPAND in
    png_set_expand_gray_1_2_4_to_8().
  Added png_ptr->unknown_chunk to hold working unknown chunk data, so it
    can be free'ed in case of error.  Revised unknown chunk handling in
    pngrutil.c and pngpread.c to use this structure.

Version 1.2.17rc3 [May 8, 2007]
  Revised symbol-handling in configure script.

Version 1.2.17rc4 [May 10, 2007]
  Revised unknown chunk handling to avoid storing unknown critical chunks.

Version 1.0.25 [May 15, 2007]
Version 1.2.17 [May 15, 2007]
  Added "png_ptr->num_trans=0" before error return in png_handle_tRNS,
    to eliminate a vulnerability (CVE-2007-2445, CERT VU#684664)

Version 1.0.26 [May 15, 2007]
Version 1.2.18 [May 15, 2007]
  Reverted the libpng-1.2.17rc3 change to symbol-handling in configure script

Version 1.2.19beta1 [May 18, 2007]
  Changed "const static" to "static PNG_CONST" everywhere, mostly undoing
    change of libpng-1.2.17beta2.  Changed other "const" to "PNG_CONST"
  Changed some handling of unused parameters, to avoid compiler warnings.
    "if (unused == NULL) return;" becomes "unused = unused".

Version 1.2.19beta2 [May 18, 2007]
  Only use the valid bits of tRNS value in png_do_expand() (Brian Cartier)

Version 1.2.19beta3 [May 19, 2007]
  Add some "png_byte" typecasts in png_check_keyword() and write new_key
  instead of key in zTXt chunk (Kevin Ryde).

Version 1.2.19beta4 [May 21, 2007]
  Add png_snprintf() function and use it in place of sprint() for improved
    defense against buffer overflows.

Version 1.2.19beta5 [May 21, 2007]
  Fixed png_handle_tRNS() to only use the valid bits of tRNS value.
  Changed handling of more unused parameters, to avoid compiler warnings.
  Removed some PNG_CONST in pngwutil.c to avoid compiler warnings.

Version 1.2.19beta6 [May 22, 2007]
  Added some #ifdef PNG_MMX_CODE_SUPPORTED where needed in pngvcrd.c
  Added a special "_MSC_VER" case that defines png_snprintf to _snprintf

Version 1.2.19beta7 [May 22, 2007]
  Squelched png_squelch_warnings() in pnggccrd.c and added
    an #ifdef PNG_MMX_CODE_SUPPORTED block around the declarations that caused
    the warnings that png_squelch_warnings was squelching.

Version 1.2.19beta8 [May 22, 2007]
  Removed __MMX__ from test in pngconf.h.

Version 1.2.19beta9 [May 23, 2007]
  Made png_squelch_warnings() available via PNG_SQUELCH_WARNINGS macro.
  Revised png_squelch_warnings() so it might work.
  Updated makefile.sgcc and makefile.solaris; added makefile.solaris-x86.

Version 1.2.19beta10 [May 24, 2007]
  Resquelched png_squelch_warnings(), use "__attribute__((used))" instead.

Version 1.4.0beta1 [April 20, 2006]
  Enabled iTXt support (changes png_struct, thus requires so-number change).
  Cleaned up PNG_ASSEMBLER_CODE_SUPPORTED vs PNG_MMX_CODE_SUPPORTED
  Eliminated PNG_1_0_X and PNG_1_2_X macros.
  Removed deprecated functions png_read_init, png_write_init, png_info_init,
    png_permit_empty_plte, png_set_gray_1_2_4_to_8, png_check_sig, and
    removed the deprecated macro PNG_MAX_UINT.
  Moved "PNG_INTERNAL" parts of png.h and pngconf.h into pngintrn.h
  Removed many WIN32_WCE #ifdefs (Cosmin).
  Reduced dependency on C-runtime library when on Windows (Simon-Pierre)
  Replaced sprintf() with png_sprintf() (Simon-Pierre)

Version 1.4.0beta2 [April 20, 2006]
  Revised makefiles and configure to avoid making links to libpng.so.*
  Moved some leftover MMX-related defines from pngconf.h to pngintrn.h
  Updated scripts/pngos2.def, pngw32.def, and projects/wince/png32ce.def

Version 1.4.0beta3 [May 10, 2006]
  Updated scripts/pngw32.def to comment out MMX functions.
  Added PNG_NO_GET_INT_32 and PNG_NO_SAVE_INT_32 macros.
  Scripts/libpng.pc.in contained "configure" style version info and would
    not work with makefiles.
  Revised pngconf.h and added pngconf.h.in, so makefiles and configure can
    pass defines to libpng and applications.

Version 1.4.0beta4 [May 11, 2006]
  Revised configure.ac, Makefile.am, and many of the makefiles to write
    their defines in pngconf.h.

Version 1.4.0beta5 [May 15, 2006]
  Added a missing semicolon in Makefile.am and Makefile.in
  Deleted extraneous square brackets from configure.ac

Version 1.4.0beta6 [June 2, 2006]
  Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
    buffer overflow.
  Changed sonum from 0 to 1.
  Removed unused prototype for png_check_sig() from png.h

Version 1.4.0beta7 [June 16, 2006]
  Exported png_write_sig (Cosmin).
  Optimized buffer in png_handle_cHRM() (Cosmin).
  Set pHYs = 2835 x 2835 pixels per meter, and added
    sCAL = 0.352778e-3 x 0.352778e-3 meters, in pngtest.png (Cosmin).
  Added png_set_benign_errors(), png_benign_error(), png_chunk_benign_error().
  Added typedef for png_int_32 and png_uint_32 on 64-bit systems.
  Added "(unsigned long)" typecast on png_uint_32 variables in printf lists.

Version 1.4.0beta8 [June 22, 2006]
  Added demonstration of user chunk support in pngtest.c, to support the
    public sTER chunk and a private vpAg chunk.

Version 1.4.0beta9 [July 3, 2006]
  Removed ordinals from scripts/pngw32.def and removed png_info_int and
    png_set_gray_1_2_4_to_8 entries.
  Inline call of png_get_uint_32() in png_get_uint_31().
  Use png_get_uint_31() to get vpAg width and height in pngtest.c
  Removed WINCE and Netware projects.
  Removed standalone Y2KINFO file.

Version 1.4.0beta10 [July 12, 2006]
  Eliminated automatic copy of pngconf.h to pngconf.h.in from configure and
    some makefiles, because it was not working reliably.  Instead, distribute
    pngconf.h.in along with pngconf.h and cause configure and some of the
    makefiles to update pngconf.h from pngconf.h.in.
  Added pngconf.h to DEPENDENCIES in Makefile.am

Version 1.4.0beta11 [August 19, 2006]
  Removed AC_FUNC_MALLOC from configure.ac.
  Added a warning when writing iCCP profile with mismatched profile length.
  Patched pnggccrd.c to assemble on x86_64 platforms.
  Moved chunk header reading into a separate function png_read_chunk_header()
    in pngrutil.c.  The chunk header (len+sig) is now serialized in a single
    operation (Cosmin).
  Implemented support for I/O states. Added png_ptr member io_state, and
    functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
    (Cosmin).
  Added png_get_io_chunk_name and png_get_io_state to scripts/*.def (Cosmin).
  Renamed scripts/pngw32.* to scripts/pngwin.* (Cosmin).
  Removed the include directories and libraries from CFLAGS and LDFLAGS
    in scripts/makefile.gcc (Cosmin).
  Used png_save_uint_32() to set vpAg width and height in pngtest.c (Cosmin).
  Cast to proper type when getting/setting vpAg units in pngtest.c (Cosmin).
  Added pngintrn.h to the Visual C++ projects (Cosmin).
  Removed scripts/list (Cosmin).
  Updated copyright year in scripts/pngwin.def (Cosmin).
  Removed PNG_TYPECAST_NULL and used standard NULL consistently (Cosmin).
  Disallowed the user to redefine png_size_t, and enforced a consistent use
    of png_size_t across libpng (Cosmin).
  Changed the type of png_ptr->rowbytes, PNG_ROWBYTES() and friends
    to png_size_t (Cosmin).
  Removed png_convert_size() and replaced png_sizeof with sizeof (Cosmin).
  Removed some unnecessary type casts (Cosmin).
  Changed prototype of png_get_compression_buffer_size() and
    png_set_compression_buffer_size() to work with png_size_t instead of
    png_uint_32 (Cosmin).
  Removed png_memcpy_check() and png_memset_check() (Cosmin).
  Fixed a typo (png_byte --> png_bytep) in libpng.3 and libpng.txt (Cosmin).
  Clarified that png_zalloc() does not clear the allocated memory,
    and png_zalloc() and png_zfree() cannot be PNGAPI (Cosmin).
  Renamed png_mem_size_t to png_alloc_size_t, fixed its definition in
    pngconf.h, and used it in all memory allocation functions (Cosmin).
  Renamed pngintrn.h to pngpriv.h, added a comment at the top of the file
    mentioning that the symbols declared in that file are private, and
    updated the scripts and the Visual C++ projects accordingly (Cosmin).
  Removed circular references between pngconf.h and pngconf.h.in in
    scripts/makefile.vc*win32 (Cosmin).
  Removing trailing '.' from the warning and error messages (Cosmin).
  Added pngdefs.h that is built by makefile or configure, instead of
    pngconf.h.in (Glenn).
  Detect and fix attempt to write wrong iCCP profile length.

Version 1.4.0beta12 [October 19, 2006]
  Changed "logical" to "bitwise" in the documentation.
  Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
  Add a typecast to stifle compiler warning in pngrutil.c

Version 1.4.0beta13 [November 10, 2006]
  Fix potential buffer overflow in sPLT chunk handler.
  Fix Makefile.am to not try to link to noexistent files.

Version 1.4.0beta14 [November 15, 2006]
  Check all exported functions for NULL png_ptr.

Version 1.4.0beta15 [November 17, 2006]
  Relocated two misplaced tests for NULL png_ptr.
  Built Makefile.in with automake-1.9.6 instead of 1.9.2.
  Build configure with autoconf-2.60 instead of 2.59
  Add "install: all" in Makefile.am so "configure; make install" will work.

Version 1.4.0beta16 [November 17, 2006]
  Added a typecast in png_zalloc().

Version 1.4.0beta17 [December 4, 2006]
  Changed "new_key[79] = '\0';" to "(*new_key)[79] = '\0';" in pngwutil.c
  Add "png_bytep" typecast to profile while calculating length in pngwutil.c

Version 1.4.0beta18 [December 7, 2006]
  Added scripts/CMakeLists.txt

Version 1.4.0beta19 [May 16, 2007]
  Revised scripts/CMakeLists.txt
  Rebuilt configure and Makefile.in with newer tools.
  Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
  Added scripts/makefile.nommx

Version 1.4.0beta20 [July 9, 2008]
  Moved several PNG_HAVE_* macros from pngpriv.h to png.h because applications
    calling set_unknown_chunk_location() need them.
  Moved several macro definitions from pngpriv.h to pngconf.h
  Merge with changes to the 1.2.X branch, as of 1.2.30beta04.
  Deleted all use of the MMX assembler code and Intel-licensed optimizations.
  Revised makefile.mingw

Version 1.4.0beta21 [July 21, 2008]
  Moved local array "chunkdata" from pngrutil.c to the png_struct, so
    it will be freed by png_read_destroy() in case of a read error (Kurt
    Christensen).

Version 1.4.0beta22 [July 21, 2008]
  Change "purpose" and "buffer" to png_ptr->chunkdata to avoid memory leaking.

Version 1.4.0beta23 [July 22, 2008]
  Change "chunkdata = NULL" to "png_ptr->chunkdata = NULL" several places in
    png_decompress_chunk().

Version 1.4.0beta24 [July 25, 2008]
  Change all remaining "chunkdata" to "png_ptr->chunkdata" in
    png_decompress_chunk(), and remove "chunkdata" from parameter list.
  Put a call to png_check_chunk_name() in png_read_chunk_header().
  Revised png_check_chunk_name() to reject a name with a lowercase 3rd byte.
  Removed two calls to png_check_chunk_name() occuring later in the process.
  Define PNG_NO_ERROR_NUMBERS by default in pngconf.h

Version 1.4.0beta25 [July 30, 2008]
  Added a call to png_check_chunk_name() in pngpread.c
  Reverted png_check_chunk_name() to accept a name with a lowercase 3rd byte.
  Added png_push_have_buffer() function to pngpread.c
  Eliminated PNG_BIG_ENDIAN_SUPPORTED and associated png_get_* macros.
  Made inline expansion of png_get_*() optional with PNG_USE_READ_MACROS.
  Eliminated all PNG_USELESS_TESTS and PNG_CORRECT_PALETTE_SUPPORTED code.
  Synced contrib directory and configure files with libpng-1.2.30beta06.
  Eliminated no-longer-used pngdefs.h (but it's still built in the makefiles)
  Relocated a misplaced "#endif /* PNG_NO_WRITE_FILTER */" in pngwutil.c

Version 1.4.0beta26 [August 4, 2008]
  Removed png_push_have_buffer() function in pngpread.c.  It increased the
    compiled library size slightly.
  Changed "-Wall" to "-W -Wall" in the CFLAGS in all makefiles (Cosmin Truta)
  Declared png_ptr "volatile" in pngread.c and pngwrite.c to avoid warnings.
  Updated contrib/visupng/cexcept.h to version 2.0.1
  Added PNG_LITERAL_CHARACTER macros for #, [, and ].

Version 1.4.0beta27 [August 5, 2008]
  Revised usage of PNG_LITERAL_SHARP in pngerror.c.
  Moved newline character from individual png_debug messages into the
    png_debug macros.
  Allow user to #define their own png_debug, png_debug1, and png_debug2.

Version 1.4.0beta28 [August 5, 2008]
  Revised usage of PNG_LITERAL_SHARP in pngerror.c.
  Added PNG_STRING_NEWLINE macro

Version 1.4.0beta29 [August 9, 2008]
  Revised usage of PNG_STRING_NEWLINE to work on non-ISO compilers.
  Added PNG_STRING_COPYRIGHT macro.
  Added non-ISO versions of png_debug macros.

Version 1.4.0beta30 [August 14, 2008]
  Added premultiplied alpha feature (Volker Wiendl).

Version 1.4.0beta31 [August 18, 2008]
  Moved png_set_premultiply_alpha from pngtrans.c to pngrtran.c
  Removed extra crc check at the end of png_handle_cHRM().  Bug introduced
    in libpng-1.4.0beta20.

Version 1.4.0beta32 [August 19, 2008]
  Added PNG_WRITE_FLUSH_SUPPORTED block around new png_flush() call.
  Revised PNG_NO_STDIO version of png_write_flush()

Version 1.4.0beta33 [August 20, 2008]
  Added png_get|set_chunk_cache_max() to limit the total number of sPLT,
    text, and unknown chunks that can be stored.

Version 1.4.0beta34 [September 6, 2008]
  Shortened tIME_string to 29 bytes in pngtest.c
  Fixed off-by-one error introduced in png_push_read_zTXt() function in
    libpng-1.2.30beta04/pngpread.c (Harald van Dijk)

Version 1.4.0beta35 [October 6, 2008]
  Changed "trans_values" to "trans_color".
  Changed so-number from 0 to 14.  Some OS do not like 0.
  Revised makefile.darwin to fix shared library numbering.
  Change png_set_gray_1_2_4_to_8() to png_set_expand_gray_1_2_4_to_8()
    in example.c (debian bug report)

Version 1.4.0beta36 [October 25, 2008]
  Sync with tEXt vulnerability fix in libpng-1.2.33rc02.

Version 1.4.0beta37 [November 13, 2008]
  Added png_check_cHRM in png.c and moved checking from pngget.c, pngrutil.c,
    and pngwrite.c

Version 1.4.0beta38 [November 22, 2008]
  Added check for zero-area RGB cHRM triangle in png_check_cHRM() and
    png_check_cHRM_fixed().

Version 1.4.0beta39 [November 23, 2008]
  Revised png_warning() to write its message on standard output by default
    when warning_fn is NULL.

Version 1.4.0beta40 [November 24, 2008]
  Eliminated png_check_cHRM().  Instead, always use png_check_cHRM_fixed().
  In png_check_cHRM_fixed(), ensure white_y is > 0, and removed redundant
    check for all-zero coordinates that is detected by the triangle check.

Version 1.4.0beta41 [November 26, 2008]
  Fixed string vs pointer-to-string error in png_check_keyword().
  Rearranged test expressions in png_check_cHRM_fixed() to avoid internal
    overflows.
  Added PNG_NO_CHECK_cHRM conditional.

Version 1.4.0beta42, 43 [December 1, 2008]
  Merge png_debug with version 1.2.34beta04.

Version 1.4.0beta44 [December 6, 2008]
  Removed redundant check for key==NULL before calling png_check_keyword()
    to ensure that new_key gets initialized and removed extra warning
    (Merge with version 1.2.34beta05 -- Arvan Pritchard).

Version 1.4.0beta45 [December 9, 2008]
  In png_write_png(), respect the placement of the filler bytes in an earlier
    call to png_set_filler() (Jim Barry).

Version 1.4.0beta46 [December 10, 2008]
  Undid previous change and added PNG_TRANSFORM_STRIP_FILLER_BEFORE and
    PNG_TRANSFORM_STRIP_FILLER_AFTER conditionals and deprecated
    PNG_TRANSFORM_STRIP_FILLER (Jim Barry).

Version 1.4.0beta47 [December 15, 2008]
  Support for dithering was disabled by default, because it has never
    been well tested and doesn't work very well.  The code has not
    been removed, however, and can be enabled by building libpng with
    PNG_READ_DITHER_SUPPORTED defined.

Version 1.4.0beta48 [February 14, 2009]
  Added new exported function png_calloc().
  Combined several instances of png_malloc(); png_memset() into png_calloc().
  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
    but was never defined.

Version 1.4.0beta49 [February 28, 2009]
  Added png_fileno() macro to pngconf.h, used in pngwio.c
  Corrected order of #ifdef's in png_debug definition in png.h
  Fixed bug introduced in libpng-1.4.0beta48 with the memset arguments
    for pcal_params.
  Fixed order of #ifdef directives in the png_debug defines in png.h
    (bug introduced in libpng-1.2.34/1.4.0beta29).
  Revised comments in png_set_read_fn() and png_set_write_fn().

Version 1.4.0beta50 [March 18, 2009]
  Use png_calloc() instead of png_malloc() to allocate big_row_buf when
    reading an interlaced file, to avoid a possible UMR.
  Undid revision of PNG_NO_STDIO version of png_write_flush().  Users
    having trouble with fflush() can build with PNG_NO_WRITE_FLUSH defined
    or supply their own flush_fn() replacement.
  Revised libpng*.txt and png.h documentation about use of png_write_flush()
    and png_set_write_fn().
  Removed fflush() from pngtest.c.
  Added "#define PNG_NO_WRITE_FLUSH" to contrib/pngminim/encoder/pngusr.h

Version 1.4.0beta51 [March 21, 2009]
  Removed new png_fileno() macro from pngconf.h .

Version 1.4.0beta52 [March 27, 2009]
  Relocated png_do_chop() ahead of building gamma tables in pngrtran.c
    This avoids building 16-bit gamma tables unnecessarily.
  Removed fflush() from pngtest.c.
  Added "#define PNG_NO_WRITE_FLUSH" to contrib/pngminim/encoder/pngusr.h
  Added a section on differences between 1.0.x and 1.2.x to libpng.3/libpng.txt

Version 1.4.0beta53 [April 1, 2009]
  Removed some remaining MMX macros from pngpriv.h
  Fixed potential memory leak of "new_name" in png_write_iCCP() (Ralph Giles)

Version 1.4.0beta54 [April 13, 2009]
  Added "ifndef PNG_SKIP_SETJMP_CHECK" block in pngconf.h to allow
    application code writers to bypass the check for multiple inclusion
    of setjmp.h when they know that it is safe to ignore the situation.
  Eliminated internal use of setjmp() in pngread.c and pngwrite.c
  Reordered ancillary chunks in pngtest.png to be the same as what
    pngtest now produces, and made some cosmetic changes to pngtest output.
  Eliminated deprecated png_read_init_3() and png_write_init_3() functions.

Version 1.4.0beta55 [April 15, 2009]
  Simplified error handling in pngread.c and pngwrite.c by putting
    the new png_read_cleanup() and png_write_cleanup() functions inline.

Version 1.4.0beta56 [April 25, 2009]
  Renamed "user_chunk_data" to "my_user_chunk_data" in pngtest.c to suppress
    "shadowed declaration" warning from gcc-4.3.3.
  Renamed "gamma" to "png_gamma" in pngset.c to avoid "shadowed declaration"
    warning about a global "gamma" variable in math.h on some platforms.

Version 1.4.0beta57 [May 2, 2009]
  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
    but was never defined (again).
  Rebuilt configure scripts with autoconf-2.63 instead of 2.62
  Removed pngprefs.h and MMX from makefiles

Version 1.4.0beta58 [May 14, 2009]
  Changed pngw32.def to pngwin.def in makefile.mingw (typo was introduced
    in beta57).
  Clarified usage of sig_bit versus sig_bit_p in example.c (Vincent Torri)

Version 1.4.0beta59 [May 15, 2009]
  Reformated sources in libpng style (3-space intentation, comment format)
  Fixed typo in libpng docs (PNG_FILTER_AVE should be PNG_FILTER_AVG)
  Added sections about the git repository and our coding style to the
    documentation
  Relocated misplaced #endif in pngwrite.c, sCAL chunk handler.

Version 1.4.0beta60 [May 19, 2009]
  Conditionally compile png_read_finish_row() which is not used by
    progressive readers.
  Added contrib/pngminim/preader to demonstrate building minimal progressive
    decoder, based on contrib/gregbook with embedded libpng and zlib.

Version 1.4.0beta61 [May 20, 2009]
  In contrib/pngminim/*, renamed "makefile.std" to "makefile", since there
    is only one makefile in those directories, and revised the README files
    accordingly.
  More reformatting of comments, mostly to capitalize sentences.

Version 1.4.0beta62 [June 2, 2009]
  Added "#define PNG_NO_WRITE_SWAP" to contrib/pngminim/encoder/pngusr.h
    and "define PNG_NO_READ_SWAP" to decoder/pngusr.h and preader/pngusr.h
  Reformatted several remaining "else statement" into two lines.
  Added a section to the libpng documentation about using png_get_io_ptr()
    in configure scripts to detect the presence of libpng.

Version 1.4.0beta63 [June 15, 2009]
  Revised libpng*.txt and libpng.3 to mention calling png_set_IHDR()
    multiple times and to specify the sample order in the tRNS chunk,
    because the ISO PNG specification has a typo in the tRNS table.
  Changed several PNG_UNKNOWN_CHUNK_SUPPORTED to
    PNG_HANDLE_AS_UNKNOWN_SUPPORTED, to make the png_set_keep mechanism
    available for ignoring known chunks even when not saving unknown chunks.
  Adopted preference for consistent use of "#ifdef" and "#ifndef" versus
    "#if defined()" and "if !defined()" where possible.

Version 1.4.0beta64 [June 24, 2009]
  Eliminated PNG_LEGACY_SUPPORTED code.
  Moved the various unknown chunk macro definitions outside of the
    PNG_READ|WRITE_ANCILLARY_CHUNK_SUPPORTED blocks.

Version 1.4.0beta65 [June 26, 2009]
  Added a reference to the libpng license in each file.

Version 1.4.0beta66 [June 27, 2009]
  Refer to the libpng license instead of the libpng license in each file.

Version 1.4.0beta67 [July 6, 2009]
  Relocated INVERT_ALPHA within png_read_png() and png_write_png().
  Added high-level API transform PNG_TRANSFORM_GRAY_TO_RGB.
  Added an "xcode" project to the projects directory (Alam Arias).

Version 1.4.0beta68 [July 19, 2009]
  Avoid some tests in filter selection in pngwutil.c

Version 1.4.0beta69 [July 25, 2009]
  Simplified the new filter-selection test.  This runs faster in the
    common "PNG_ALL_FILTERS" and PNG_FILTER_NONE cases.
  Removed extraneous declaration from the new call to png_read_gray_to_rgb()
    (bug introduced in libpng-1.4.0beta67).
  Fixed up xcode project (Alam Arias)
  Added a prototype for png_64bit_product() in png.c

Version 1.4.0beta70 [July 27, 2009]
  Avoid a possible NULL dereference in debug build, in png_set_text_2().
    (bug introduced in libpng-0.95, discovered by Evan Rouault)

Version 1.4.0beta71 [July 29, 2009]
  Rebuilt configure scripts with autoconf-2.64.

Version 1.4.0beta72 [August 1, 2009]
  Replaced *.tar.lzma with *.tar.xz in distribution.  Get the xz codec
    from <http://tukaani.org/xz>.

Version 1.4.0beta73 [August 1, 2009]
  Reject attempt to write iCCP chunk with negative embedded profile length
    (JD Chen) (CVE-2009-5063).

Version 1.4.0beta74 [August 8, 2009]
  Changed png_ptr and info_ptr member "trans" to "trans_alpha".

Version 1.4.0beta75 [August 21, 2009]
  Removed an extra png_debug() recently added to png_write_find_filter().
  Fixed incorrect #ifdef in pngset.c regarding unknown chunk support.

Version 1.4.0beta76 [August 22, 2009]
  Moved an incorrectly located test in png_read_row() in pngread.c

Version 1.4.0beta77 [August 27, 2009]
  Removed lpXYZ.tar.bz2 (with CRLF), KNOWNBUG, libpng-x.y.z-KNOWNBUG.txt,
    and the "noconfig" files from the distribution.
  Moved CMakeLists.txt from scripts into the main libpng directory.
  Various bugfixes and improvements to CMakeLists.txt (Philip Lowman)

Version 1.4.0beta78 [August 31, 2009]
  Converted all PNG_NO_* tests to PNG_*_SUPPORTED everywhere except pngconf.h
  Eliminated PNG_NO_FREE_ME and PNG_FREE_ME_SUPPORTED macros.
  Use png_malloc plus a loop instead of png_calloc() to initialize
    row_pointers in png_read_png().

Version 1.4.0beta79 [September 1, 2009]
  Eliminated PNG_GLOBAL_ARRAYS and PNG_LOCAL_ARRAYS; always use local arrays.
  Eliminated PNG_CALLOC_SUPPORTED macro and always provide png_calloc().

Version 1.4.0beta80 [September 17, 2009]
  Removed scripts/libpng.icc
  Changed typecast of filler from png_byte to png_uint_16 in png_set_filler().
    (Dennis Gustafsson)
  Fixed typo introduced in beta78 in pngtest.c ("#if def " should be "#ifdef ")

Version 1.4.0beta81 [September 23, 2009]
  Eliminated unused PNG_FLAG_FREE_* defines from pngpriv.h
  Expanded TAB characters in pngrtran.c
  Removed PNG_CONST from all "PNG_CONST PNG_CHNK" declarations to avoid
    compiler complaints about doubly declaring things "const".
  Changed all "#if [!]defined(X)" to "if[n]def X" where possible.
  Eliminated unused png_ptr->row_buf_size

Version 1.4.0beta82 [September 25, 2009]
  Moved redundant IHDR checking into new png_check_IHDR() in png.c
    and report all errors found in the IHDR data.
  Eliminated useless call to png_check_cHRM() from pngset.c

Version 1.4.0beta83 [September 25, 2009]
  Revised png_check_IHDR() to eliminate bogus complaint about filter_type.

Version 1.4.0beta84 [September 30, 2009]
  Fixed some inconsistent indentation in pngconf.h
  Revised png_check_IHDR() to add a test for width variable less than 32-bit.

Version 1.4.0beta85 [October 1, 2009]
  Revised png_check_IHDR() again, to check info_ptr members instead of
    the contents of the returned parameters.

Version 1.4.0beta86 [October 9, 2009]
  Updated the "xcode" project (Alam Arias).
  Eliminated a shadowed declaration of "pp" in png_handle_sPLT().

Version 1.4.0rc01 [October 19, 2009]
  Trivial cosmetic changes.

Version 1.4.0beta87 [October 30, 2009]
  Moved version 1.4.0 back into beta.

Version 1.4.0beta88 [October 30, 2009]
  Revised libpng*.txt section about differences between 1.2.x and 1.4.0
    because most of the new features have now been ported back to 1.2.41

Version 1.4.0beta89 [November 1, 2009]
  More bugfixes and improvements to CMakeLists.txt (Philip Lowman)
  Removed a harmless extra png_set_invert_alpha() from pngwrite.c
  Apply png_user_chunk_cache_max within png_decompress_chunk().
  Merged libpng-1.2.41.txt with libpng-1.4.0.txt where appropriate.

Version 1.4.0beta90 [November 2, 2009]
  Removed all remaining WIN32_WCE #ifdefs except those involving the
    time.h "tm" structure

Version 1.4.0beta91 [November 3, 2009]
  Updated scripts/pngw32.def and projects/wince/png32ce.def
  Copied projects/wince/png32ce.def to the scripts directory.
  Added scripts/makefile.wce
  Patched ltmain.sh for wince support.
  Added PNG_CONVERT_tIME_SUPPORTED macro.

Version 1.4.0beta92 [November 4, 2009]
  Make inclusion of time.h in pngconf.h depend on PNG_CONVERT_tIME_SUPPORTED
  Make #define PNG_CONVERT_tIME_SUPPORTED depend on PNG_WRITE_tIME_SUPPORTED
  Revised libpng*.txt to describe differences from 1.2.40 to 1.4.0 (instead
    of differences from 1.2.41 to 1.4.0)

Version 1.4.0beta93 [November 7, 2009]
  Added PNG_DEPSTRUCT, PNG_DEPRECATED, PNG_USE_RESULT, PNG_NORETURN, and
    PNG_ALLOCATED macros to detect deprecated direct access to the
    png_struct or info_struct members and other deprecated usage in
    applications (John Bowler).
  Updated scripts/makefile* to add "-DPNG_CONFIGURE_LIBPNG" to CFLAGS,
    to prevent warnings about direct access to png structs by libpng
    functions while building libpng.  They need to be tested, especially
    those using compilers other than gcc.
  Updated projects/visualc6 and visualc71 with "/d PNG_CONFIGURE_LIBPNG".
    They should work but still need to be updated to remove
    references to pnggccrd.c or pngvcrd.c and ASM building.
  Added README.txt to the beos, cbuilder5, netware, and xcode projects warning
    that they need to be updated, to remove references to pnggccrd.c and
    pngvcrd.c and to depend on pngpriv.h
  Removed three direct references to read_info_ptr members in pngtest.c
    that were detected by the new PNG_DEPSTRUCT macro.
  Moved the png_debug macro definitions and the png_read_destroy(),
    png_write_destroy() and png_far_to_near() prototypes from png.h
    to pngpriv.h (John Bowler)
  Moved the synopsis lines for png_read_destroy(), png_write_destroy()
    png_debug(), png_debug1(), and png_debug2() from libpng.3 to libpngpf.3.

Version 1.4.0beta94 [November 9, 2009]
  Removed the obsolete, unused pnggccrd.c and pngvcrd.c files.
  Updated CMakeLists.txt to add "-DPNG_CONFIGURE_LIBPNG" to the definitions.
  Removed dependency of pngtest.o on pngpriv.h in the makefiles.
  Only #define PNG_DEPSTRUCT, etc. in pngconf.h if not already defined.

Version 1.4.0beta95 [November 10, 2009]
  Changed png_check_sig() to !png_sig_cmp() in contrib programs.
  Added -DPNG_CONFIGURE_LIBPNG to contrib/pngminm/*/makefile
  Changed png_check_sig() to !png_sig_cmp() in contrib programs.
  Corrected the png_get_IHDR() call in contrib/gregbook/readpng2.c
  Changed pngminim/*/gather.sh to stop trying to remove pnggccrd.c and pngvcrd.c
  Added dependency on pngpriv.h in contrib/pngminim/*/makefile

Version 1.4.0beta96 [November 12, 2009]
  Renamed scripts/makefile.wce to scripts/makefile.cegcc
  Revised Makefile.am to use libpng.sys while building libpng.so
    so that only PNG_EXPORT functions are exported.
  Removed the deprecated png_check_sig() function/macro.
  Removed recently removed function names from scripts/*.def
  Revised pngtest.png to put chunks in the same order written by pngtest
    (evidently the same change made in libpng-1.0beta54 was lost).
  Added PNG_PRIVATE macro definition in pngconf.h for possible future use.

Version 1.4.0beta97 [November 13, 2009]
  Restored pngtest.png to the libpng-1.4.0beta7 version.
  Removed projects/beos and netware.txt; no one seems to be supporting them.
  Revised Makefile.in

Version 1.4.0beta98 [November 13, 2009]
  Added the "xcode" project to zip distributions,
  Fixed a typo in scripts/pngwin.def introduced in beta97.

Version 1.4.0beta99 [November 14, 2009]
  Moved libpng-config.in and libpng.pc-configure.in out of the scripts
    directory, to libpng-config.in and libpng-pc.in, respectively, and
    modified Makefile.am and configure.ac accordingly.  Now "configure"
    needs nothing from the "scripts" directory.
  Avoid redefining PNG_CONST in pngconf.h

Version 1.4.0beta100 [November 14, 2009]
  Removed ASM builds from projects/visualc6 and projects/visualc71
  Removed scripts/makefile.nommx and makefile.vcawin32
  Revised CMakeLists.txt to account for new location of libpng-config.in
    and libpng-pc.in
  Updated INSTALL to reflect removal and relocation of files.

Version 1.4.0beta101 [November 14, 2009]
  Restored the binary files (*.jpg, *.png, some project files) that were
    accidentally deleted from the zip and 7z distributions when the xcode
    project was added.

Version 1.4.0beta102 [November 18, 2009]
  Added libpng-config.in and libpng-pc.in to the zip and 7z distributions.
  Fixed a typo in projects/visualc6/pngtest.dsp, introduced in beta100.
  Moved descriptions of makefiles and other scripts out of INSTALL into
    scripts/README.txt
  Updated the copyright year in scripts/pngwin.rc from 2006 to 2009.

Version 1.4.0beta103 [November 21, 2009]
  Removed obsolete comments about ASM from projects/visualc71/README_zlib.txt
  Align row_buf on 16-byte boundary in memory.
  Restored the PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED guard around the call
    to png_flush() after png_write_IEND().  See 1.4.0beta32, 1.4.0beta50
    changes above and 1.2.30, 1.2.30rc01 and rc03 in 1.2.41 CHANGES.  Someone
    needs this feature.
  Make the 'png_jmpbuf' macro expand to a call that records the correct
    longjmp function as well as returning a pointer to the setjmp
    jmp_buf buffer, and marked direct access to jmpbuf 'deprecated'.
    (John Bowler)

Version 1.4.0beta104 [November 22, 2009]
  Removed png_longjmp_ptr from scripts/*.def and libpng.3
  Rebuilt configure scripts with autoconf-2.65

Version 1.4.0beta105 [November 25, 2009]
  Use fast integer PNG_DIVIDE_BY_255() or PNG_DIVIDE_BY_65535()
    to accomplish alpha premultiplication when
    PNG_READ_COMPOSITE_NODIV_SUPPORTED is defined.
  Changed "/255" to "/255.0" in background calculations to make it clear
    that the 255 is used as a double.

Version 1.4.0beta106 [November 27, 2009]
  Removed premultiplied alpha feature.

Version 1.4.0beta107 [December 4, 2009]
  Updated README
  Added "#define PNG_NO_PEDANTIC_WARNINGS" in the libpng source files.
  Removed "-DPNG_CONFIGURE_LIBPNG" from the makefiles and projects.
  Revised scripts/makefile.netbsd, makefile.openbsd, and makefile.sco
    to put png.h and pngconf.h in $prefix/include, like the other scripts,
    instead of in $prefix/include/libpng.  Also revised makefile.sco
    to put them in $prefix/include/libpng15 instead of in
    $prefix/include/libpng/libpng15.

Version 1.4.0beta108 [December 11, 2009]
  Removed leftover "-DPNG_CONFIGURE_LIBPNG" from contrib/pngminim/*/makefile
  Relocated png_do_chop() to its original position in pngrtran.c; the
    change in version 1.2.41beta08 caused transparency to be handled wrong
    in some 16-bit datastreams (Yusaku Sugai).

Version 1.4.0beta109 [December 13, 2009]
  Added "bit_depth" parameter to the private png_build_gamma_table() function.
  Pass bit_depth=8 to png_build_gamma_table() when bit_depth is 16 but the
    PNG_16_TO_8 transform has been set, to avoid unnecessary build of 16-bit
    tables.

Version 1.4.0rc02 [December 20, 2009]
  Declared png_cleanup_needed "volatile" in pngread.c and pngwrite.c

Version 1.4.0rc03 [December 22, 2009]
  Renamed libpng-pc.in back to libpng.pc.in and revised CMakeLists.txt
    (revising the change in 1.4.0beta99)

Version 1.4.0rc04 [December 25, 2009]
  Swapped PNG_UNKNOWN_CHUNKS_SUPPORTED and PNG_HANDLE_AS_UNKNOWN_SUPPORTED
    in pngset.c to be consistent with other changes in version 1.2.38.

Version 1.4.0rc05 [December 25, 2009]
  Changed "libpng-pc.in" to "libpng.pc.in" in configure.ac, configure, and
    Makefile.in to be consistent with changes in libpng-1.4.0rc03

Version 1.4.0rc06 [December 29, 2009]
  Reverted the gamma_table changes from libpng-1.4.0beta109.
  Fixed some indentation errors.

Version 1.4.0rc07 [January 1, 2010]
  Revised libpng*.txt and libpng.3 about 1.2.x->1.4.x differences.
  Use png_calloc() instead of png_malloc(); png_memset() in pngrutil.c
  Update copyright year to 2010.

Version 1.4.0rc08 [January 2, 2010]
  Avoid deprecated references to png_ptr-io_ptr and png_ptr->error_ptr
    in pngtest.c

Version 1.4.0 [January 3, 2010]
  No changes.

Version 1.4.1beta01 [January 8, 2010]
  Updated CMakeLists.txt for consistent indentation and to avoid an
    unclosed if-statement warning (Philip Lowman).
  Revised Makefile.am and Makefile.in to remove references to Y2KINFO,
    KNOWNBUG, and libpng.la (Robert Schwebel).
  Revised the makefiles to install the same files and symbolic
    links as configure, except for libpng.la and libpng14.la.
  Make png_set|get_compression_buffer_size() available even when
    PNG_WRITE_SUPPORTED is not enabled.
  Revised Makefile.am and Makefile.in to simplify their maintenance.
  Revised scripts/makefile.linux to install a link to libpng14.so.14.1

Version 1.4.1beta02 [January 9, 2010]
  Revised the rest of the makefiles to install a link to libpng14.so.14.1

Version 1.4.1beta03 [January 10, 2010]
  Removed png_set_premultiply_alpha() from scripts/*.def

Version 1.4.1rc01 [January 16, 2010]
  No changes.

Version 1.4.1beta04 [January 23, 2010]
  Revised png_decompress_chunk() to improve speed and memory usage when
    decoding large chunks.
  Added png_set|get_chunk_malloc_max() functions.

Version 1.4.1beta05 [January 26, 2010]
  Relocated "int k" declaration in pngtest.c to minimize its scope.

Version 1.4.1beta06 [January 28, 2010]
  Revised png_decompress_chunk() to use a two-pass method suggested by
    John Bowler.

Version 1.4.1beta07 [February 6, 2010]
  Folded some long lines in the source files.
  Added defineable PNG_USER_CHUNK_CACHE_MAX, PNG_USER_CHUNK_MALLOC_MAX,
    and a PNG_USER_LIMITS_SUPPORTED flag.
  Eliminated use of png_ptr->irowbytes and reused the slot in png_ptr as
    png_ptr->png_user_chunk_malloc_max.
  Revised png_push_save_buffer() to do fewer but larger png_malloc() calls.

Version 1.4.1beta08 [February 6, 2010]
  Minor cleanup and updating of dates and copyright year.

Version 1.5.0beta01 [February 7, 2010]
  Moved declaration of png_struct into private pngstruct.h and png_info
    into pnginfo.h

Version 1.4.1beta09 and 1.5.0beta02 [February 7, 2010]
  Reverted to original png_push_save_buffer() code.

Version 1.4.1beta10 and 1.5.0beta03 [February 8, 2010]
  Return allocated "old_buffer" in png_push_save_buffer() before
    calling png_error(), to avoid a potential memory leak.
  Updated configure script to use SO number 15.

Version 1.5.0beta04 [February 9, 2010]
  Removed malformed "incomplete struct declaration" of png_info from png.h

Version 1.5.0beta05 [February 12, 2010]
  Removed PNG_DEPSTRUCT markup in pngstruct.h and pnginfo.h, and undid the
    linewrapping that it entailed.
  Revised comments in pngstruct.h and pnginfo.h and added pointers to
    the libpng license.
  Changed PNG_INTERNAL to PNG_EXPOSE_INTERNAL_STRUCTURES
  Removed the cbuilder5 project, which has not been updated to 1.4.0.

Version 1.4.1beta12 and 1.5.0beta06 [February 14, 2010]
  Fixed type declaration of png_get_chunk_malloc_max() in pngget.c (Daisuke
    Nishikawa)

Version 1.5.0beta07 [omitted]

Version 1.5.0beta08 [February 19, 2010]
  Changed #ifdef PNG_NO_STDIO_SUPPORTED to #ifdef PNG_NO_CONSOLE_IO_SUPPORTED
    wherever png_snprintf() is used to construct error and warning messages.
  Noted in scripts/makefile.mingw that it expects to be run under MSYS.
  Removed obsolete unused MMX-querying support from contrib/gregbook
  Added exported png_longjmp() function.
  Removed the AIX redefinition of jmpbuf in png.h
  Added -D_ALLSOURCE in configure.ac, makefile.aix, and CMakeLists.txt
    when building on AIX.

Version 1.5.0beta09 [February 19, 2010]
  Removed -D_ALLSOURCE from configure.ac, makefile.aix, and CMakeLists.txt.
  Changed the name of png_ptr->jmpbuf to png_ptr->png_jmpbuf in pngstruct.h

Version 1.5.0beta10 [February 25, 2010]
  Removed unused gzio.c from contrib/pngminim gather and makefile scripts
  Removed replacement error handlers from contrib/gregbook.  Because of
    the new png_longjmp() function they are no longer needed.

Version 1.5.0beta11 [March 6, 2010]
  Removed checking for already-included setjmp.h from pngconf.h
  Fixed inconsistent indentations and made numerous cosmetic changes.
  Revised the "SEE ALSO" style of libpng.3, libpngpf.3, and png.5

Version 1.5.0beta12 [March 9, 2010]
  Moved "#include png.h" inside pngpriv.h and removed "#include png.h" from
    the source files, along with "#define PNG_EXPOSE_INTERNAL_STRUCTURES"
    and "#define PNG_NO_PEDANTIC_WARNINGS" (John Bowler).
  Created new pngdebug.h and moved debug definitions there.

Version 1.5.0beta13 [March 10, 2010]
  Protect pngstruct.h, pnginfo.h, and pngdebug.h from being included twice.
  Revise the "#ifdef" blocks in png_inflate() so it will compile when neither
    PNG_USER_CHUNK_MALLOC_MAX nor PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
    is defined.
  Removed unused png_measure_compressed_chunk() from pngpriv.h and libpngpf.3
  Moved the 'config.h' support from pngconf.h to pngpriv.h
  Removed PNGAPI from the png_longjmp_ptr typedef.
  Eliminated dependence of pngtest.c on the private pngdebug.h file.
  Make all png_debug macros into *unterminated* statements or
    expressions (i.e. a trailing ';' must always be added) and correct
    the format statements in various png_debug messages.

Version 1.5.0beta14 [March 14, 2010]
  Removed direct access to png_ptr->io_ptr from the Windows code in pngtest.c
  Revised Makefile.am to account for recent additions and replacements.
  Corrected CE and OS/2 DEF files (scripts/png*def) for symbols removed and
    added ordinal numbers to the Windows DEF file and corrected the duplicated
    ordinal numbers on CE symbols that are commented out.
  Added back in export symbols that can be present in the Windows build but
    are disabled by default.
  PNG_EXPORT changed to include an 'ordinal' field for DEF file generation.
    PNG_CALLBACK added to make callback definitions uniform.  PNGAPI split
    into PNGCAPI (base C form), PNGAPI (exports) and PNGCBAPI (callbacks),
    and appropriate changes made to all files.  Cygwin builds re-hinged to
    allow procedure call standard changes and to remove the need for the DEF
    file (fixes build on Cygwin).
  Enabled 'attribute' warnings that are relevant to library APIs and callbacks.
  Changed rules for generation of the various symbol files and added a new
    rule for a DEF file (which is also added to the distribution).
  Updated the symbol file generation to stop it adding spurious spaces
    to EOL (coming from preprocessor macro expansion).  Added a facility
    to join tokens in the output and rewrite *.dfn to use this.
  Eliminated scripts/*.def in favor of libpng.def; updated projects/visualc71
    and removed scripts/makefile.cygwin.
  Made PNG_BUILD_DLL safe: it can be set whenever a DLL is being built.
  Removed the include of sys/types.h - apparently unnecessary now on the
    platforms on which it happened (all but Mac OS and RISC OS).
  Moved the Mac OS test into pngpriv.h (the only place it is used.)

Version 1.5.0beta15 [March 17, 2010]
  Added symbols.chk target to Makefile.am to validate the symbols in png.h
    against the new DEF file scripts/symbols.def.
  Changed the default DEF file back to pngwin.def.
  Removed makefile.mingw.
  Eliminated PNG_NO_EXTERN and PNG_ALL_EXTERN

Version 1.5.0beta16 [April 1, 2010]
  Make png_text_struct independent of PNG_iTXt_SUPPORTED, so that
    fields are initialized in all configurations.  The READ/WRITE
    macros (PNG_(READ|WRITE)_iTXt_SUPPORTED) still function as
    before to disable code to actually read or write iTXt chunks
    and iTXt_SUPPORTED can be used to detect presence of either
    read or write support (but it is probably better to check for
    the one actually required - read or write.)
  Combined multiple png_warning() calls for a single error.
  Restored the macro definition of png_check_sig().

Version 1.5.0beta17 [April 17, 2010]
  Added some "(long)" typecasts to printf calls in png_handle_cHRM().
  Documented the fact that png_set_dither() was disabled since libpng-1.4.0.
  Reenabled png_set_dither() but renamed it to png_set_quantize() to reflect
    more accurately what it actually does.  At the same time, renamed
    the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros to
    PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
  Added some "(long)" typecasts to printf calls in png_handle_cHRM().
  Freeze build-time only configuration in the build.
    In all prior versions of libpng most configuration options
    controlled by compiler #defines had to be repeated by the
    application code that used libpng.  This patch changes this
    so that compilation options that can only be changed at build
    time are frozen in the build.  Options that are compiler
    dependent (and those that are system dependent) are evaluated
    each time - pngconf.h holds these.  Options that can be changed
    per-file in the application are in png.h.  Frozen options are
    in the new installed header file pnglibconf.h (John Bowler)
  Removed the xcode project because it has not been updated to work
    with libpng-1.5.0.
  Removed the ability to include optional pngusr.h

Version 1.5.0beta18 [April 17, 2010]
  Restored the ability to include optional pngusr.h
  Moved replacements for png_error() and png_warning() from the
    contrib/pngminim project to pngerror.c, for use when warnings or
    errors are disabled via PNG_NO_WARN or PNG_NO_ERROR_TEXT, to avoid
    storing unneeded error/warning text.
  Updated contrib/pngminim project to work with the new pnglibconf.h
  Added some PNG_NO_* defines to contrib/pngminim/*/pngusr.h to save space.

Version 1.5.0beta19 [April 24, 2010]
  Added PNG_{READ,WRITE}_INT_FUNCTIONS_SUPPORTED.  This allows the functions
    to read and write ints to be disabled independently of PNG_USE_READ_MACROS,
    which allows libpng to be built with the functions even though the default
    is to use the macros - this allows applications to choose at app build
    time whether or not to use macros (previously impossible because the
    functions weren't in the default build.)
  Changed Windows calling convention back to __cdecl for API functions.
    For Windows/x86 platforms only:
      __stdcall is no longer needed for Visual Basic, so libpng-1.5.0 uses
      __cdecl throughout (both API functions and callbacks) on Windows/x86
      platforms.
  Replaced visualc6 and visualc71 projects with new vstudio project
  Relaxed the overly-restrictive permissions of some files.

Version 1.5.0beta20 [April 24, 2010]
  Relaxed more overly-restrictive permissions of some files.

Version 1.5.0beta21 [April 27, 2010]
  Removed some unwanted binary bytes and changed CRLF to NEWLINE in the new
    vstudio project files, and some trivial editing of some files in the
    scripts directory.
  Set PNG_NO_READ_BGR, PNG_NO_IO_STATE, and PNG_NO_TIME_RFC1123 in
    contrib/pngminim/decoder/pngusr.h to make a smaller decoder application.

Version 1.5.0beta22 [April 28, 2010]
  Fixed dependencies of GET_INT_32 - it does not require READ_INT_FUNCTIONS
    because it has a macro equivalent.
  Improved the options.awk script; added an "everything off" option.
  Revised contrib/pngminim to use the "everything off" option in pngusr.dfa.

Version 1.5.0beta23 [April 29, 2010]
  Corrected PNG_REMOVED macro to take five arguments.
    The macro was documented with two arguments (name,ordinal), however
    the symbol checking .dfn files assumed five arguments.  The five
    argument form seems more useful so it is changed to that.
  Corrected PNG_UNKNOWN_CHUNKS_SUPPORTED to PNG_HANDLE_AS_UNKNOWN_SUPPORTED
    in gregbook/readpng2.c
  Corrected protection of png_get_user_transform_ptr. The API declaration in
    png.h is removed if both READ and WRITE USER_TRANSFORM are turned off
    but was left defined in pngtrans.c
  Added logunsupported=1 to cause pnglibconf.h to document disabled options.
    This makes the installed pnglibconf.h more readable but causes no
    other change.  The intention is that users of libpng will find it
    easier to understand if an API they need is missing.
  Include png_reset_zstream() in png.c only when PNG_READ_SUPPORTED is defined.
  Removed dummy_inflate.c from contrib/pngminim/encoder
  Removed contrib/pngminim/*/gather.sh; gathering is now done in the makefile.

Version 1.5.0beta24 [May 7, 2010]
  Use bitwise "&" instead of arithmetic mod in pngrutil.c calculation of the
    offset of the png_ptr->rowbuf pointer into png_ptr->big_row_buf.
  Added more blank lines for readability.

Version 1.5.0beta25 [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.5.0beta26 [June 18, 2010]
  In pngpread.c: png_push_process_row() add check for too many rows.

Version 1.5.0beta27 [June 18, 2010]
  Removed the check added in beta25 as it is now redundant.

Version 1.5.0beta28 [June 20, 2010]
  Rewrote png_process_IDAT_data to consistently treat extra data as warnings
    and handle end conditions more cleanly.
  Removed the new (beta26) check in png_push_process_row().

Version 1.5.0beta29 [June 21, 2010]
  Revised scripts/options.awk to work on Sunos (but still doesn't work)
  Added comment to options.awk and contrib/pngminim/*/makefile to try nawk.

Version 1.5.0beta30 [June 22, 2010]
  Stop memory leak when reading a malformed sCAL chunk.

Version 1.5.0beta31 [June 26, 2010]
  Revised pngpread.c patch of beta28 to avoid an endless loop.
  Removed some trailing blanks.

Version 1.5.0beta32 [June 26, 2010]
  Removed leftover scripts/options.patch and scripts/options.rej

Version 1.5.0beta33 [July 6, 3010]
  Made FIXED and FLOATING options consistent in the APIs they enable and
    disable.  Corrected scripts/options.awk to handle both command line
    options and options specified in the .dfa files.
  Changed char *msg to PNG_CONST char *msg in pngrutil.c
  Make png_set_sRGB_gAMA_and_cHRM set values using either the fixed or
    floating point APIs, but not both.
  Reversed patch to remove error handler when the jmp_buf is stored in the
    main program structure, not the png_struct.
    The error handler is needed because the default handler in libpng will
    always use the jmp_buf in the library control structure; this is never
    set.  The gregbook code is a useful example because, even though it
    uses setjmp/longjmp, it shows how error handling can be implemented
    using control mechanisms not directly supported by libpng.  The
    technique will work correctly with mechanisms such as Microsoft
    Structure Exceptions or C++ exceptions (compiler willing - note that gcc
    does not by default support interworking of C and C++ error handling.)
  Reverted changes to call png_longjmp in contrib/gregbook where it is not
    appropriate.  If mainprog->jmpbuf is used by setjmp, then png_longjmp
    cannot be used.
  Changed "extern PNG_EXPORT" to "PNG_EXPORT" in png.h (Jan Nijtmans)
  Changed "extern" to "PNG_EXTERN" in pngpriv.h (except for the 'extern "C" {')

Version 1.5.0beta34 [July 12, 2010]
  Put #ifndef PNG_EXTERN, #endif around the define PNG_EXTERN in pngpriv.h

Version 1.5.0beta35 [July 24, 2010]
  Removed some newly-added TAB characters.
  Added -DNO_PNG_SNPRINTF to CFLAGS in scripts/makefile.dj2
  Moved the definition of png_snprintf() outside of the enclosing
    #ifdef blocks in pngconf.h

Version 1.5.0beta36 [July 29, 2010]
  Patches by John Bowler:
  Fixed point APIs are now supported throughout (no missing APIs).
  Internal fixed point arithmetic support exists for all internal floating
    point operations.
  sCAL validates the floating point strings it is passed.
  Safe, albeit rudimentary, Watcom support is provided by PNG_API_RULE==2
  Two new APIs exist to get the number of passes without turning on the
    PNG_INTERLACE transform and to get the number of rows in the current
    pass.
  A new test program, pngvalid.c, validates the gamma code.
  Errors in the 16-bit gamma correction (overflows) have been corrected.
  cHRM chunk testing is done consistently (previously the floating point
    API bypassed it, because the test really didn't work on FP, now the test
    is performed on the actual values to be stored in the PNG file so it
    works in the FP case too.)
  Most floating point APIs now simply call the fixed point APIs after
    converting the values to the fixed point form used in the PNG file.
  The standard headers no longer include zlib.h, which is currently only
    required for pngstruct.h and can therefore be internal.
  Revised png_get_int_32 to undo the PNG two's complement representation of
    negative numbers.

Version 1.5.0beta37 [July 30, 2010]
  Added a typecast in png_get_int_32() in png.h and pngrutil.h to avoid
    a compiler warning.
  Replaced oFFs 0,0 with oFFs -10,20 in pngtest.png

Version 1.5.0beta38 [July 31, 2010]
  Implemented remaining "_fixed" functions.
  Corrected a number of recently introduced warnings mostly resulting from
    safe but uncast assignments to shorter integers.  Also added a zlib
    VStudio release library project because the latest zlib Official Windows
    build does not include such a thing.
  Revised png_get_int_16() to be similar to png_get_int_32().
  Restored projects/visualc71.

Version 1.5.0beta39 [August 2, 2010]
  VisualC/GCC warning fixes, VisualC build fixes
  The changes include support for function attributes in VC in addition to
    those already present in GCC - necessary because without these some
    warnings are unavoidable.  Fixes include signed/unsigned fixes in
    pngvalid and checks with gcc -Wall -Wextra -Wunused.
  VC requires function attributes on function definitions as well as
    declarations, PNG_FUNCTION has been added to enable this and the
    relevant function definitions changed.

Version 1.5.0beta40 [August 6, 2010]
  Correct use of _WINDOWS_ in pngconf.h
  Removed png_mem_ #defines; they are no longer used.
  Added the sRGB chunk to pngtest.png

Version 1.5.0beta41 [August 11, 2010]
  Added the cHRM chunk to pngtest.png
  Don't try to use version-script with cygwin/mingw.
  Revised contrib/gregbook to work under cygwin/mingw.

Version 1.5.0beta42 [August 18, 2010]
  Add .dll.a to the list of extensions to be symlinked by Makefile.am (Yaakov)
  Made all API functions that have const arguments and constant string
    literal pointers declare them (John Bowler).

Version 1.5.0beta43 [August 20, 2010]
  Removed spurious tabs, shorten long lines (no source change)
    Also added scripts/chkfmt to validate the format of all the files that can
    reasonably be validated (it is suggested to run "make distclean" before
    checking, because some machine generated files have long lines.)
  Reformatted the CHANGES file to be more consistent throughout.
  Made changes to address various issues identified by GCC, mostly
    signed/unsigned and shortening problems on assignment but also a few
    difficult to optimize (for GCC) loops.
  Fixed non-GCC fixed point builds.  In png.c a declaration was misplaced
    in an earlier update.  Fixed to declare the auto variables at the head.
  Use cexcept.h in pngvalid.c.

Version 1.5.0beta44 [August 24, 2010]
  Updated CMakeLists.txt to use CMAKE_INSTALL_LIBDIR variable; useful for
    installing libpng in /usr/lib64 (Funda Wang).
  Revised CMakeLists.txt to put the man pages in share/man/man* not man/man*
  Revised CMakeLists.txt to make symlinks instead of copies when installing.
  Changed PNG_LIB_NAME from pngNN to libpngNN in CMakeLists.txt (Philip Lowman)
  Implemented memory checks within pngvalid
  Reformatted/rearranged pngvalid.c to assist use of progressive reader.
  Check interlaced images in pngvalid
  Clarified pngusr.h comments in pnglibconf.dfa
  Simplified the pngvalid error-handling code now that cexcept.h is in place.
  Implemented progressive reader in pngvalid.c for standard tests
  Implemented progressive read in pngvalid.c gamma tests
  Turn on progressive reader in pngvalid.c by default and tidy code.

Version 1.5.0beta45 [August 26, 2010]
  Added an explicit make step to projects/vstudio for pnglibconf.h
    Also corrected zlib.vcxproj into which Visual Studio had introduced
    what it calls an "authoring error".  The change to make pnglibconf.h
    simply copies the file; in the future it may actually generate the
    file from scripts/pnglibconf.dfa as the other build systems do.
  Changed pngvalid to work when floating point APIs are disabled
  Renamed the prebuilt scripts/pnglibconf.h to scripts/pnglibconf.h.prebuilt
  Supply default values for PNG_USER_PRIVATEBUILD and PNG_USER_DLLFNAME_POSTFIX
    in pngpriv.h in case the user neglected to define them in their pngusr.h

Version 1.5.0beta46 [August 28, 2010]
  Added new private header files to libpng_sources in CMakeLists.txt
  Added PNG_READ_16BIT, PNG_WRITE_16BIT, and PNG_16BIT options.
  Added reference to scripts/pnglibconf.h.prebuilt in the visualc71 project.

Version 1.5.0beta47 [September 11, 2010]
  Fixed a number of problems with 64-bit compilation reported by Visual
    Studio 2010 (John Bowler).

Version 1.5.0beta48 [October 4, 2010]
  Updated CMakeLists.txt (Philip Lowman).
  Revised autogen.sh to recognize and use $AUTOCONF, $AUTOMAKE, $AUTOHEADER,
    $AUTOPOINT, $ACLOCAL and $LIBTOOLIZE
  Fixed problem with symbols creation in Makefile.am which was assuming that
    all versions of ccp write to standard output by default (Martin Banky). The
    bug was introduced in libpng-1.2.9beta5.
  Removed unused mkinstalldirs.

Version 1.5.0beta49 [October 8, 2010]
  Undid Makefile.am revision of 1.5.0beta48.

Version 1.5.0beta50 [October 14, 2010]
  Revised Makefile.in to account for mkinstalldirs being removed.
  Added some "(unsigned long)" typecasts in printf statements in pngvalid.c.
  Suppressed a compiler warning in png_handle_sPLT().
  Check for out-of-range text compression mode in png_set_text().

Version 1.5.0beta51 [October 15, 2010]
  Changed embedded dates to "(PENDING RELEASE) in beta releases (and future
    rc releases) to minimize the difference between releases.

Version 1.5.0beta52 [October 16, 2010]
  Restored some of the embedded dates (in png.h, png.c, documentation, etc.)

Version 1.5.0beta53 [October 18, 2010]
  Updated INSTALL to mention using "make maintainer-clean" and to remove
    obsolete statement about a custom ltmain.sh
  Disabled "color-tests" by default in Makefile.am so it will work with
    automake versions earlier than 1.11.1
  Use document name "libpng-manual.txt" instead of "libpng-<version>.txt"
    to simplify version differences.
  Removed obsolete remarks about setjmp handling from INSTALL.
  Revised and renamed the typedef in png.h and png.c that was designed
    to catch library and header mismatch.

Version 1.5.0beta54 [November 10, 2010]
  Require 48 bytes, not 64 bytes, for big_row_buf in overflow checks.
  Used a consistent structure for the pngget.c functions.

Version 1.5.0beta55 [November 21, 2010]
  Revised png_get_uint_32, png_get_int_32, png_get_uint_16 (Cosmin)
  Moved reading of file signature into png_read_sig (Cosmin)
  Fixed atomicity of chunk header serialization (Cosmin)
  Added test for io_state in pngtest.c (Cosmin)
  Added "#!/bin/sh" at the top of contrib/pngminim/*/gather.sh scripts.
  Changes to remove gcc warnings (John Bowler)
    Certain optional gcc warning flags resulted in warnings in libpng code.
    With these changes only -Wconversion and -Wcast-qual cannot be turned on.
    Changes are trivial rearrangements of code.  -Wconversion is not possible
    for pngrutil.c (because of the widespread use of += et al on variables
    smaller than (int) or (unsigned int)) and -Wcast-qual is not possible
    with pngwio.c and pngwutil.c because the 'write' callback and zlib
    compression both fail to declare their input buffers with 'const'.

Version 1.5.0beta56 [December 7, 2010]
  Added the private PNG_UNUSED() macro definition in pngpriv.h.
  Added some commentary about PNG_EXPORT in png.h and pngconf.h
  Revised PNG_EXPORT() macro and added PNG_EXPORTA() macro, with the
    objective of simplifying and improving the cosmetic appearance of png.h.
  Fixed some incorrect "=" macro names in pnglibconf.dfa
  Included documentation of changes in 1.5.0 from 1.4.x in libpng-manual.txt

Version 1.5.0beta57 [December 9, 2010]
  Documented the pngvalid gamma error summary with additional comments and
    print statements.
  Improved missing symbol handling in checksym.awk; symbols missing in both
    the old and new files can now be optionally ignored, treated as errors
    or warnings.
  Removed references to pngvcrd.c and pnggccrd.c from the vstudio project.
  Updated "libpng14" to "libpng15" in the visualc71 project.
  Enabled the strip16 tests in pngvalid.`
  Don't display test results (except PASS/FAIL) when running "make test".
    Instead put them in pngtest-log.txt
  Added "--with-zprefix=<string>" to configure.ac
  Updated the prebuilt configuration files to autoconf version 2.68

Version 1.5.0beta58 [December 19, 2010]
  Fixed interlace image handling and add test cases (John Bowler)
  Fixed the clean rule in Makefile.am to remove pngtest-log.txt
  Made minor changes to work around warnings in gcc 3.4

Version 1.5.0rc01 [December 27, 2010]
  No changes.

Version 1.5.0rc02 [December 27, 2010]
  Eliminated references to the scripts/*.def files in project/visualc71.

Version 1.5.0rc03 [December 28, 2010]
  Eliminated scripts/*.def and revised Makefile.am accordingly

Version 1.5.0rc04 [December 29, 2010]
  Fixed bug in background transformation handling in pngrtran.c (it was
    looking for the flag in png_ptr->transformations instead of in
    png_ptr->flags) (David Raymond).

Version 1.5.0rc05 [December 31, 2010]
  Fixed typo in a comment in CMakeLists.txt (libpng14 => libpng15) (Cosmin)

Version 1.5.0rc06 [January 4, 2011]
  Changed the new configure option "zprefix=string" to "zlib-prefix=string"

Version 1.5.0rc07 [January 4, 2011]
  Updated copyright year.

Version 1.5.0 [January 6, 2011]
  No changes.

version 1.5.1beta01 [January 8, 2011]
  Added description of png_set_crc_action() to the manual.
  Added a note in the manual that the type of the iCCP profile was changed
    from png_charpp to png_bytepp in png_get_iCCP().  This change happened
    in version 1.5.0beta36 but is not noted in the CHANGES.  Similarly,
    it was changed from png_charpp to png_const_bytepp in png_set_iCCP().
  Ensure that png_rgb_to_gray ignores palette mapped images, if libpng
    internally happens to call it with one, and fixed a failure to handle
    palette mapped images correctly.  This fixes CVE-2690.

Version 1.5.1beta02 [January 14, 2011]
  Fixed a bug in handling of interlaced images (bero at arklinux.org).
  Updated CMakeLists.txt (Clifford Yapp)

Version 1.5.1beta03 [January 14, 2011]
  Fixed typecasting of some png_debug() statements (Cosmin)

Version 1.5.1beta04 [January 16, 2011]
  Updated documentation of png_set|get_tRNS() (Thomas Klausner).
  Mentioned in the documentation that applications must #include "zlib.h"
    if they need access to anything in zlib.h, and that a number of
    macros such as png_memset() are no longer accessible by applications.
  Corrected pngvalid gamma test "sample" function to access all of the color
    samples of each pixel, instead of sampling the red channel three times.
  Prefixed variable names index, div, exp, gamma with "png_" to avoid "shadow"
    warnings, and (mistakenly) changed png_exp() to exp().

Version 1.5.1beta05 [January 16, 2011]
  Changed variable names png_index, png_div, png_exp, and png_gamma to
    char_index, divisor, exp_b10, and gamma_val, respectively, and
    changed exp() back to png_exp().

Version 1.5.1beta06 [January 20, 2011]
  Prevent png_push_crc_skip() from hanging while reading an unknown chunk
    or an over-large compressed zTXt chunk with the progressive reader.
  Eliminated more GCC "shadow" warnings.
  Revised png_fixed() in png.c to avoid compiler warning about reaching the
    end without returning anything.

Version 1.5.1beta07 [January 22, 2011]
  In the manual, describe the png_get_IHDR() arguments in the correct order.
  Added const_png_structp and const_png_infop types, and used them in
    prototypes for most png_get_*() functions.

Version 1.5.1beta08 [January 23, 2011]
  Added png_get_io_chunk_type() and deprecated png_get_io_chunk_name()
  Added synopses for the IO_STATE functions and other missing synopses
    to the manual. Removed the synopses from libpngpf.3 because they
    were out of date and no longer useful.  Better information can be
    obtained by reading the prototypes and comments in pngpriv.h
  Attempted to fix cpp on Solaris with S. Studio 12 cc, fix build
    Added a make macro DFNCPP that is a CPP that will accept the tokens in
    a .dfn file and adds configure stuff to test for such a CPP.  ./configure
    should fail if one is not available.
  Corrected const_png_ in png.h to png_const_ to avoid polluting the namespace.
  Added png_get_current_row_number and png_get_current_pass_number for the
    benefit of the user transform callback.
  Added png_process_data_pause and png_process_data_skip for the benefit of
    progressive readers that need to stop data processing or want to optimize
    skipping of unread data (e.g., if the reader marks a chunk to be skipped.)

Version 1.5.1beta09 [January 24, 2011]
  Enhanced pngvalid, corrected an error in gray_to_rgb, corrected doc error.
    pngvalid contains tests of transforms, which tests are currently disabled
    because they are incompletely tested.  gray_to_rgb was failing to expand
    the bit depth for smaller bit depth images; this seems to be a long
    standing error and resulted, apparently, in invalid output
    (CVE-2011-0408, CERT VU#643140).  The documentation did not accurately
    describe what libpng really does when converting RGB to gray.

Version 1.5.1beta10 [January 27, 2010]
  Fixed incorrect examples of callback prototypes in the manual, that were
    introduced in libpng-1.0.0.
  In addition the order of the png_get_uint macros with respect to the
    relevant function definitions has been reversed.  This helps the
    preprocessing of the symbol files be more robust.  Furthermore, the
    symbol file preprocessing now uses -DPNG_NO_USE_READ_MACROS even when
    the library may actually be built with PNG_USE_READ_MACROS; this stops
    the read macros interfering with the symbol file format.
  Made the manual, synopses, and function prototypes use the function
    argument names file_gamma, int_file_gamma, and srgb_intent consistently.

Version 1.5.1beta11 [January 28, 2011]
  Changed PNG_UNUSED from "param=param;" to "{if(param){}}".
  Corrected local variable type in new API png_process_data_skip()
    The type was self-evidently incorrect but only causes problems on 64-bit
    architectures.
  Added transform tests to pngvalid and simplified the arguments.

Version 1.5.1rc01 [January 29, 2011]
  No changes.

Version 1.5.1rc02 [January 31, 2011]
  Added a request in the manual that applications do not use "png_" or
    "PNG_" to begin any of their own symbols.
  Changed PNG_UNUSED to "(void)param;" and updated the commentary in pngpriv.h

Version 1.5.1 [February 3, 2011]
  No changes.

Version 1.5.2beta01 [February 13, 2011]
  More -Wshadow fixes for older gcc compilers.  Older gcc versions apparently
    check formal parameters names in function declarations (as well as
    definitions) to see if they match a name in the global namespace.
  Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the
    old VisualC++ preprocessor.
  Turned on interlace handling in png_read_png().
  Fixed gcc pendantic warnings.
  Handle longjmp in Cygwin.
  Fixed png_get_current_row_number() in the interlaced case.
  Cleaned up ALPHA flags and transformations.
  Implemented expansion to 16 bits.

Version 1.5.2beta02 [February 19, 2011]
  Fixed mistake in the descriptions of user read_transform and write_transform
    function prototypes in the manual.  The row_info struct is png_row_infop.
  Reverted png_get_current_row_number() to previous (1.5.2beta01) behavior.
  Corrected png_get_current_row_number documentation
  Fixed the read/write row callback documentation.
    This documents the current behavior, where the callback is called after
    every row with information pertaining to the next row.

Version 1.5.2beta03 [March 3, 2011]
  Fixed scripts/makefile.vcwin32
  Updated contrib/pngsuite/README to add the word "modify".
  Define PNG_ALLOCATED to blank when _MSC_VER<1300.

Version 1.5.2rc01 [March 19, 2011]
  Define remaining attributes to blank when MSC_VER<1300.
  ifdef out mask arrays in pngread.c when interlacing is not supported.

Version 1.5.2rc02 [March 22, 2011]
  Added a hint to try CPP=/bin/cpp if "cpp -E" fails in scripts/pnglibconf.mak
    and in contrib/pngminim/*/makefile, eg., on SunOS 5.10, and removed "strip"
    from the makefiles.
  Fixed a bug (present since libpng-1.0.7) that makes png_handle_sPLT() fail
    to compile when PNG_NO_POINTER_INDEXING is defined (Chubanov Kirill)

Version 1.5.2rc03 [March 24, 2011]
  Don't include standard header files in png.h while building the symbol table,
    to avoid cpp failure on SunOS (introduced PNG_BUILDING_SYMBOL_TABLE macro).

Version 1.5.2 [March 31, 2011]
  No changes.

Version 1.5.3beta01 [April 1, 2011]
  Re-initialize the zlib compressor before compressing non-IDAT chunks.
  Added API functions (png_set_text_compression_level() and four others) to
    set parameters for zlib compression of non-IDAT chunks.

Version 1.5.3beta02 [April 3, 2011]
  Updated scripts/symbols.def with new API functions.
  Only compile the new zlib re-initializing code when text or iCCP is
    supported, using PNG_WRITE_COMPRESSED_TEXT_SUPPORTED macro.
  Improved the optimization of the zlib CMF byte (see libpng-1.2.6beta03).
  Optimize the zlib CMF byte in non-IDAT compressed chunks

Version 1.5.3beta03 [April 16, 2011]
  Fixed gcc -ansi -pedantic compile. A strict ANSI system does not have
    snprintf, and the "__STRICT_ANSI__" detects that condition more reliably
    than __STDC__ (John Bowler).
  Removed the PNG_PTR_NORETURN attribute because it too dangerous. It tells
    the compiler that a user supplied callback (the error handler) does not
    return, yet there is no guarantee in practice that the application code
    will correctly implement the error handler because the compiler only
    issues a warning if there is a mistake (John Bowler).
  Removed the no-longer-used PNG_DEPSTRUCT macro.
  Updated the zlib version to 1.2.5 in the VStudio project.
  Fixed 64-bit builds where png_uint_32 is smaller than png_size_t in
    pngwutil.c (John Bowler).
  Fixed bug with stripping the filler or alpha channel when writing, that
    was introduced in libpng-1.5.2beta01 (bug report by Andrew Church).

Version 1.5.3beta04 [April 27, 2011]
  Updated pngtest.png with the new zlib CMF optimization.
  Cleaned up conditional compilation code and of background/gamma handling
    Internal changes only except a new option to avoid compiling the
    png_build_grayscale_palette API (which is not used at all internally.)
    The main change is to move the transform tests (READ_TRANSFORMS,
    WRITE_TRANSFORMS) up one level to the caller of the APIs.  This avoids
    calls to spurious functions if all transforms are disabled and slightly
    simplifies those functions.  Pngvalid modified to handle this.
    A minor change is to stop the strip_16 and expand_16 interfaces from
    disabling each other; this allows the future alpha premultiplication
    code to use 16-bit intermediate values while still producing 8-bit output.
    png_do_background and png_do_gamma have been simplified to take a single
    pointer to the png_struct rather than pointers to every item required
    from the png_struct. This makes no practical difference to the internal
    code.
  A serious bug in the pngvalid internal routine 'standard_display_init' has
    been fixed - this failed to initialize the red channel and accidentally
    initialized the alpha channel twice.
  Changed png_struct jmp_buf member name from png_jmpbuf to tmp_jmpbuf to
    avoid a possible clash with the png_jmpbuf macro on some platforms.

Version 1.5.3beta05 [May 6, 2011]
  Added the "_POSIX_SOURCE" feature test macro to ensure libpng sees the
    correct API. _POSIX_SOURCE is defined in pngpriv.h, pngtest.c and
    pngvalid.c to ensure that POSIX conformant systems disable non-POSIX APIs.
  Removed png_snprintf and added formatted warning messages.  This change adds
    internal APIs to allow png_warning messages to have parameters without
    requiring the host OS to implement snprintf.  As a side effect the
    dependency of the tIME-supporting RFC1132 code on stdio is removed and
    PNG_NO_WARNINGS does actually work now.
  Pass "" instead of '\0' to png_default_error() in png_err().  This mistake
    was introduced in libpng-1.2.20beta01.  This fixes CVE-2011-2691.
  Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte
    optimization configureable.
  IDAT compression failed if preceded by a compressed text chunk (bug
    introduced in libpng-1.5.3beta01-02).  This was because the attempt to
    reset the zlib stream in png_write_IDAT happened after the first IDAT
    chunk had been deflated - much too late.  In this change internal
    functions were added to claim/release the z_stream and, hopefully, make
    the code more robust.  Also deflateEnd checking is added - previously
    libpng would ignore an error at the end of the stream.

Version 1.5.3beta06 [May 8, 2011]
  Removed the -D_ALL_SOURCE from definitions for AIX in CMakeLists.txt
  Implemented premultiplied alpha support: png_set_alpha_mode API

Version 1.5.3beta07 [May 11, 2011]
  Added expand_16 support to the high level interface.
  Added named value and 'flag' gamma support to png_set_gamma.  Made a minor
    change from the previous (unreleased) ABI/API to hide the exact value used
    for Macs - it's not a good idea to embed this in the ABI!
  Moved macro definitions for PNG_HAVE_IHDR, PNG_HAVE_PLTE, and PNG_AFTER_IDAT
    from pngpriv.h to png.h because they must be visible to applications
    that call png_set_unknown_chunks().
  Check for up->location !PNG_AFTER_IDAT when writing unknown chunks
    before IDAT.

Version 1.5.3beta08 [May 16, 2011]
  Improved "pngvalid --speed" to exclude more of pngvalid from the time.
  Documented png_set_alpha_mode(), other changes in libpng.3/libpng-manual.txt
  The cHRM chunk now sets the defaults for png_set_rgb_to_gray() (when negative
    parameters are supplied by the caller), while in the absence of cHRM
    sRGB/Rec 709 values are still used.  This introduced a divide-by-zero
    bug in png_handle_cHRM().
  The bKGD chunk no longer overwrites the background value set by
    png_set_background(), allowing the latter to be used before the file
    header is read. It never performed any useful function to override
    the default anyway.
  Added memory overwrite and palette image checks to pngvalid.c
    Previously palette image code was poorly checked. Since the transformation
    code has a special palette path in most cases this was a severe weakness.
  Minor cleanup and some extra checking in pngrutil.c and pngrtran.c. When
    expanding an indexed image, always expand to RGBA if transparency is
    present.

Version 1.5.3beta09 [May 17, 2011]
  Reversed earlier 1.5.3 change of transformation order; move png_expand_16
    back where it was.  The change doesn't work because it requires 16-bit
    gamma tables when the code only generates 8-bit ones.  This fails
    silently; the libpng code just doesn't do any gamma correction.  Moving
    the tests back leaves the old, inaccurate, 8-bit gamma calculations, but
    these are clearly better than none!

Version 1.5.3beta10 [May 20, 2011]

  png_set_background() and png_expand_16() did not work together correctly.
    This problem is present in 1.5.2; if png_set_background is called with
    need_expand false and the matching 16 bit color libpng erroneously just
    treats it as an 8-bit color because of where png_do_expand_16 is in the
    transform list.  This simple fix reduces the supplied colour to 8-bits,
    so it gets smashed, but this is better than the current behavior.
  Added tests for expand16, more fixes for palette image tests to pngvalid.
    Corrects the code for palette image tests and disables attempts to
    validate palette colors.

Version 1.5.3rc01 [June 3, 2011]
  No changes.

Version 1.5.3rc02 [June 8, 2011]
  Fixed uninitialized memory read in png_format_buffer() (Bug report by
    Frank Busse, CVE-2011-2501, related to CVE-2004-0421).

Version 1.5.3beta11 [June 11, 2011]
  Fixed png_handle_sCAL which is broken in 1.5. This fixes CVE 2011-2692.
  Added sCAL to pngtest.png
  Revised documentation about png_set_user_limits() to say that it also affects
    png writing.
  Revised handling of png_set_user_limits() so that it can increase the
    limit beyond the PNG_USER_WIDTH|HEIGHT_MAX; previously it could only
    reduce it.
  Make the 16-to-8 scaling accurate. Dividing by 256 with no rounding is
    wrong (high by one) 25% of the time. Dividing by 257 with rounding is
    wrong in 128 out of 65536 cases. Getting the right answer all the time
    without division is easy.
  Added "_SUPPORTED" to the PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION macro.
  Added projects/owatcom, an IDE project for OpenWatcom to replace
    scripts/makefile.watcom.  This project works with OpenWatcom 1.9. The
    IDE autogenerates appropriate makefiles (libpng.mk) for batch processing.
    The project is configurable, unlike the Visual Studio project, so long
    as the developer has an awk.
  Changed png_set_gAMA to limit the gamma value range so that the inverse
    of the stored value cannot overflow the fixed point representation,
    and changed other things OpenWatcom warns about.
  Revised pngvalid.c to test PNG_ALPHA_MODE_SUPPORTED correctly. This allows
    pngvalid to build when ALPHA_MODE is not supported, which is required if
    it is to build on libpng 1.4.
  Removed string/memory macros that are no longer used and are not
    necessarily fully supportable, particularly png_strncpy and png_snprintf.
  Added log option to pngvalid.c and attempted to improve gamma messages.

Version 1.5.3 [omitted]
  People found the presence of a beta release following an rc release
    to be confusing; therefore we bump the version to libpng-1.5.4beta01
    and there will be no libpng-1.5.3 release.

Version 1.5.4beta01 [June 14, 2011]
  Made it possible to undefine PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
    to get the same (inaccurate) output as libpng-1.5.2 and earlier.
  Moved definitions of PNG_HAVE_IHDR, PNG_AFTER_IDAT, and PNG_HAVE_PLTE
    outside of an unknown-chunk block in png.h because they are also
    needed for other uses.

Version 1.5.4beta02 [June 14, 2011]
  Fixed and clarified LEGACY 16-to-8 scaling code.
  Added png_set_chop_16() API, to match inaccurate results from previous
    libpng versions.
  Removed the ACCURATE and LEGACY options (they are no longer useable)
  Use the old scaling method for background if png_set_chop_16() was
    called.
  Made png_set_chop_16() API removeable by disabling PNG_CHOP_16_TO_8_SUPPORTED

Version 1.5.4beta03 [June 15, 2011]
  Fixed a problem in png_do_expand_palette() exposed by optimization in
    1.5.3beta06
  Also removed a spurious and confusing "trans" member ("trans") from png_info.
  The palette expand optimization prevented expansion to an intermediate RGBA
    form if tRNS was present but alpha was marked to be stripped; this exposed
    a check for tRNS in png_do_expand_palette() which is inconsistent with the
    code elsewhere in libpng.
  Correction to the expand_16 code; removed extra instance of
    png_set_scale_16_to_8 from pngpriv.h

Version 1.5.4beta04 [June 16, 2011]
  Added a missing "#ifdef PNG_READ_BACKGROUND_SUPPORTED/#endif" in pngrtran.c
  Added PNG_TRANSFORM_CHOP_16 to the high-level read transforms.
  Made PNG_READ_16_TO_8_ACCURATE_SCALE configurable again.  If this is
    not enabled, png_set_strip_16() and png_do_scale_16_to_8() aren't built.
  Revised contrib/visupng, gregbook, and pngminim to demonstrate chop_16_to_8

Version 1.5.4beta05 [June 16, 2011]
  Renamed png_set_strip_16() to png_set_scale_16() and renamed
    png_set_chop_16() to png_set_strip(16) in an attempt to minimize the
    behavior changes between libpng14 and libpng15.

Version 1.5.4beta06 [June 18, 2011]
  Fixed new bug that was causing both strip_16 and scale_16 to be applied.

Version 1.5.4beta07 [June 19, 2011]
  Fixed pngvalid, simplified macros, added checking for 0 in sCAL.
    The ACCURATE scale macro is no longer defined in 1.5 - call the
    png_scale_16_to_8 API.  Made sure that PNG_READ_16_TO_8 is still defined
    if the png_strip_16_to_8 API is present.  png_check_fp_number now
    maintains some state so that positive, negative and zero values are
    identified.  sCAL uses these to be strictly spec conformant.

Version 1.5.4beta08 [June 23, 2011]
  Fixed pngvalid if ACCURATE_SCALE is defined.
  Updated scripts/pnglibconf.h.prebuilt.

Version 1.5.4rc01 [June 30, 2011]
  Define PNG_ALLOCATED to "restrict" only if MSC_VER >= 1400.

Version 1.5.4 [July 7, 2011]
  No changes.

Version 1.5.5beta01 [July 13, 2011]
  Fixed some typos and made other minor changes in the manual.
  Updated contrib/pngminus/makefile.std (Samuli Souminen)

Version 1.5.5beta02 [July 14, 2011]
  Revised Makefile.am and Makefile.in to look in the right directory for
    pnglibconf.h.prebuilt

Version 1.5.5beta03 [July 27, 2011]
  Enabled compilation with g++ compiler.  This compiler does not recognize
    the file extension, so it always compiles with C++ rules.  Made minor
    changes to pngrutil.c to cast results where C++ expects it but C does not.
  Minor editing of libpng.3 and libpng-manual.txt.

Version 1.5.5beta04 [July 29, 2011]
  Revised CMakeLists.txt (Clifford Yapp)
  Updated commentary about the png_rgb_to_gray() default coefficients
    in the manual and in pngrtran.c

Version 1.5.5beta05 [August 17, 2011]
  Prevent unexpected API exports from non-libpng DLLs on Windows.  The "_DLL"
    is removed from the test of whether a DLL is being built (this erroneously
    caused the libpng APIs to be marked as DLL exports in static builds under
    Microsoft Visual Studio).  Almost all of the libpng building configuration
    is moved from pngconf.h to pngpriv.h, but PNG_DLL_EXPORT remains in
    pngconf.h, though, so that it is colocated with the import definition (it
    is no longer used anywhere in the installed headers).  The VStudio project
    definitions have been cleaned up: "_USRDLL" has been removed from the
    static library builds (this was incorrect), and PNG_USE_DLL has been added
    to pngvalid to test the functionality (pngtest does not supply it,
    deliberately).  The spurious "_EXPORTS" has been removed from the
    libpng build (all these errors were a result of copy/paste between project
    configurations.)
  Added new types and internal functions for CIE RGB end point handling to
    pngpriv.h (functions yet to be implemented).

Version 1.5.5beta06 [August 26, 2011]
  Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set in CMakeLists.txt
    (Clifford Yap)
  Fixes to rgb_to_gray and cHRM XYZ APIs (John Bowler):
    The rgb_to_gray code had errors when combined with gamma correction.
    Some pixels were treated as true grey when they weren't and such pixels
    and true grey ones were not gamma corrected (the original value of the
    red component was used instead).  APIs to get and set cHRM using color
    space end points have been added and the rgb_to_gray code that defaults
    based on cHRM, and the divide-by-zero bug in png_handle_cHRM (CERT
    VU#477046, CVE-2011-3328, introduced in 1.5.4) have been corrected.
  A considerable number of tests has been added to pngvalid for the
    rgb_to_gray transform.
  Arithmetic errors in rgb_to_gray whereby the calculated gray value was
    truncated to the bit depth rather than rounded have been fixed except in
    the 8-bit non-gamma-corrected case (where consistency seems more important
    than correctness.)  The code still has considerable inaccuracies in the
    8-bit case because 8-bit linear arithmetic is used.

Version 1.5.5beta07 [September 7, 2011]
  Added "$(ARCH)" option to makefile.darwin
  Added SunOS support to configure.ac and Makefile.am
  Changed png_chunk_benign_error() to png_warning() in png.c, in
    png_XYZ_from_xy_checked().

Version 1.5.5beta08 [September 10, 2011]
  Fixed 64-bit compilation errors (gcc). The errors fixed relate
    to conditions where types that are 32 bits in the GCC 32-bit
    world (uLong and png_size_t) become 64 bits in the 64-bit
    world.  This produces potential truncation errors which the
    compiler correctly flags.
  Relocated new HAVE_SOLARIS_LD definition in configure.ac
  Constant changes for 64-bit compatibility (removal of L suffixes). The
    16-bit cases still use "L" as we don't have a 16-bit test system.

Version 1.5.5rc01 [September 15, 2011]
  Removed "L" suffixes in pngpriv.h

Version 1.5.5 [September 22, 2011]
  No changes.

Version 1.5.6beta01 [September 22, 2011]
  Fixed some 64-bit type conversion warnings in pngrtran.c
  Moved row_info from png_struct to a local variable.
  The various interlace mask arrays have been made into arrays of
    bytes and made PNG_CONST and static (previously some arrays were
    marked PNG_CONST and some weren't).
  Additional checks have been added to the transform code to validate the
    pixel depths after the transforms on both read and write.
  Removed some redundant code from pngwrite.c, in png_destroy_write_struct().
  Changed chunk reading/writing code to use png_uint_32 instead of png_byte[4].
    This removes the need to allocate temporary strings for chunk names on
    the stack in the read/write code.  Unknown chunk handling still uses the
    string form because this is exposed in the API.

Version 1.5.6beta02 [September 26, 2011]
  Added a note in the manual the png_read_update_info() must be called only
    once with a particular info_ptr.
  Fixed a typo in the definition of the new PNG_STRING_FROM_CHUNK(s,c) macro.

Version 1.5.6beta03 [September 28, 2011]
  Revised test-pngtest.sh to report FAIL when pngtest fails.
  Added "--strict" option to pngtest, to report FAIL when the failure is
    only because the resulting valid files are different.
  Revised CMakeLists.txt to work with mingw and removed some material from
    CMakeLists.txt that is no longer useful in libpng-1.5.

Version 1.5.6beta04 [October 5, 2011]
  Fixed typo in Makefile.in and Makefile.am ("-M Wl" should be "-M -Wl")."

Version 1.5.6beta05 [October 12, 2011]
  Speed up png_combine_row() for interlaced images. This reduces the generality
    of the code, allowing it to be optimized for Adam7 interlace.  The masks
    passed to png_combine_row() are now generated internally, avoiding
    some code duplication and localizing the interlace handling somewhat.
  Align png_struct::row_buf - previously it was always unaligned, caused by
    a bug in the code that attempted to align it; the code needs to subtract
    one from the pointer to take account of the filter byte prepended to
    each row.
  Optimized png_combine_row() when rows are aligned. This gains a small
    percentage for 16-bit and 32-bit pixels in the typical case where the
    output row buffers are appropriately aligned. The optimization was not
    previously possible because the png_struct buffer was always misaligned.
  Fixed bug in png_write_chunk_header() debug print, introduced in 1.5.6beta01.

Version 1.5.6beta06 [October 17, 2011]
  Removed two redundant tests for unitialized row.
  Fixed a relatively harmless memory overwrite in compressed text writing
    with a 1 byte zlib buffer.
  Add ability to call png_read_update_info multiple times to pngvalid.c.
  Fixes for multiple calls to png_read_update_info. These fixes attend to
    most of the errors revealed in pngvalid, however doing the gamma work
    twice results in inaccuracies that can't be easily fixed.  There is now
    a warning in the code if this is going to happen.
  Turned on multiple png_read_update_info in pngvalid transform tests.
  Prevent libpng from overwriting unused bits at the end of the image when
    it is not byte aligned, while reading. Prior to libpng-1.5.6 libpng would
    overwrite the partial byte at the end of each row if the row width was not
    an exact multiple of 8 bits and the image is not interlaced.

Version 1.5.6beta07 [October 21, 2011]
  Made png_ptr->prev_row an aligned pointer into png_ptr->big_prev_row
    (Mans Rullgard).

Version 1.5.6rc01 [October 26, 2011]
  Changed misleading "Missing PLTE before cHRM" warning to "Out of place cHRM"

Version 1.5.6rc02 [October 27, 2011]
  Added LSR() macro to defend against buggy compilers that evaluate non-taken
    code branches and complain about out-of-range shifts.

Version 1.5.6rc03 [October 28, 2011]
  Renamed the LSR() macro to PNG_LSR() and added PNG_LSL() macro.
  Fixed compiler warnings with Intel and MSYS compilers. The logical shift
    fix for Microsoft Visual C is required by other compilers, so this
    enables that fix for all compilers when using compile-time constants.
    Under MSYS 'byte' is a name declared in a system header file, so we
    changed the name of a local variable to avoid the warnings that result.
  Added #define PNG_ALIGN_TYPE PNG_ALIGN_NONE to contrib/pngminim/*/pngusr.h

Version 1.5.6 [November 3, 2011]
  No changes.

Version 1.5.7beta01 [November 4, 2011]
  Added support for ARM processor, when decoding all PNG up-filtered rows
    and any other-filtered rows with 3 or 4 bytes per pixel (Mans Rullgard).
  Fixed bug in pngvalid on early allocation failure; fixed type cast in
    pngmem.c; pngvalid would attempt to call png_error() if the allocation
    of a png_struct or png_info failed. This would probably have led to a
    crash.  The pngmem.c implementation of png_malloc() included a cast
    to png_size_t which would fail on large allocations on 16-bit systems.
  Fix for the preprocessor of the Intel C compiler. The preprocessor
    splits adjacent @ signs with a space; this changes the concatentation
    token from @-@-@ to PNG_JOIN; that should work with all compiler
    preprocessors.
  Paeth filter speed improvements from work by Siarhei Siamashka. This
    changes the 'Paeth' reconstruction function to improve the GCC code
    generation on x86. The changes are only part of the suggested ones;
    just the changes that definitely improve speed and remain simple.
    The changes also slightly increase the clarity of the code.

Version 1.5.7beta02 [November 11, 2011]
  Check compression_type parameter in png_get_iCCP and remove spurious
    casts. The compression_type parameter is always assigned to, so must
    be non-NULL. The cast of the profile length potentially truncated the
    value unnecessarily on a 16-bit int system, so the cast of the (byte)
    compression type to (int) is specified by ANSI-C anyway.
  Fixed FP division by zero in pngvalid.c; the 'test_pixel' code left
    the sBIT fields in the test pixel as 0, which resulted in a floating
    point division by zero which was irrelevant but causes systems where
    FP exceptions cause a crash. Added code to pngvalid to turn on FP
    exceptions if the appropriate glibc support is there to ensure this is
    tested in the future.
  Updated scripts/pnglibconf.mak and scripts/makefile.std to handle the
    new PNG_JOIN macro.
  Added versioning to pnglibconf.h comments.
  Simplified read/write API initial version; basic read/write tested on
    a variety of images, limited documentation (in the header file.)
  Installed more accurate linear to sRGB conversion tables. The slightly
    modified tables reduce the number of 16-bit values that
    convert to an off-by-one 8-bit value.  The "makesRGB.c" code that was used
    to generate the tables is now in a contrib/sRGBtables sub-directory.

Version 1.5.7beta03 [November 17, 2011]
  Removed PNG_CONST from the sRGB table declarations in pngpriv.h and png.c
  Added run-time detection of NEON support.
  Added contrib/libtests; includes simplified API test and timing test and
    a color conversion utility for rapid checking of failed 'pngstest' results.
  Multiple transform bug fixes plus a work-round for double gamma correction.
    libpng does not support more than one transform that requires linear data
    at once - if this is tried typically the results is double gamma
    correction. Since the simplified APIs can need rgb to gray combined with
    a compose operation it is necessary to do one of these outside the main
    libpng transform code. This check-in also contains fixes to various bugs
    in the simplified APIs themselves and to some bugs in compose and rgb to
    gray (on palette) itself.
  Fixes for C++ compilation using g++ When libpng source is compiled
    using g++. The compiler imposes C++ rules on the C source; thus it
    is desireable to make the source work with either C or C++ rules
    without throwing away useful error information.  This change adds
    png_voidcast to allow C semantic (void*) cases or the corresponding
    C++ static_cast operation, as appropriate.
  Added --noexecstack to assembler file compilation. GCC does not set
    this on assembler compilation, even though it does on C compilation.
    This creates security issues if assembler code is enabled; the
    work-around is to set it by default in the flags for $(CCAS)
  Work around compilers that don't support declaration of const data. Some
    compilers fault 'extern const' data declarations (because the data is
    not initialized); this turns on const-ness only for compilers where
    this is known to work.

Version 1.5.7beta04 [November 17, 2011]
  Since the gcc driver does not recognize the --noexecstack flag, we must
    use the -Wa prefix to have it passed through to the assembler.
    Also removed a duplicate setting of this flag.
  Added files that were omitted from the libpng-1.5.7beta03 zip distribution.

Version 1.5.7beta05 [November 25, 2011]
  Removed "zTXt" from warning in generic chunk decompression function.
  Validate time settings passed to pngset() and png_convert_to_rfc1123()
    (Frank Busse). Note: This prevented CVE-2015-7981 from affecting
    libpng-1.5.7 and later.
  Added MINGW support to CMakeLists.txt
  Reject invalid compression flag or method when reading the iTXt chunk.
  Backed out 'simplified' API changes. The API seems too complex and there
    is a lack of consensus or enthusiasm for the proposals.  The API also
    reveals significant bugs inside libpng (double gamma correction and the
    known bug of being unable to retrieve a corrected palette). It seems
    better to wait until the bugs, at least, are corrected.
  Moved pngvalid.c into contrib/libtests
  Rebuilt Makefile.in, configure, etc., with autoconf-2.68

Version 1.5.7rc01 [December 1, 2011]
  Replaced an "#if" with "#ifdef" in pngrtran.c
  Revised #if PNG_DO_BC block in png.c (use #ifdef and add #else)

Version 1.5.7rc02 [December 5, 2011]
  Revised project files and contrib/pngvalid/pngvalid.c to account for
    the relocation of pngvalid into contrib/libtests.
  Revised pngconf.h to use " __declspec(restrict)" only when MSC_VER >= 1400,
    as in libpng-1.5.4.
  Put CRLF line endings in the owatcom project files.

Version 1.5.7rc03 [December 7, 2011]
  Updated CMakeLists.txt to account for the relocation of pngvalid.c

Version 1.5.7 [December 15, 2011]
  Minor fixes to pngvalid.c for gcc 4.6.2 compatibility to remove warnings
    reported by earlier versions.

Version 1.5.8beta01 [January 15, 2011]
  Removed '#include config.h"' from contrib/libtests/pngvalid.c.  It's not
    needed and causes trouble for VPATH building.
  Moved AC_MSG_CHECKING([if libraries can be versioned]) later to the proper
    location in configure.ac (Gilles Espinasse).
  Fix bug in pngerror.c: some long warnings were being improperly truncated
    (CVE-2011-3464, bug introduced in libpng-1.5.3beta05).

Version 1.5.8rc01 [January 21, 2012]
  No changes.

Version 1.5.8rc02 [January 25, 2012]
  Fixed Min/GW uninstall to remove libpng.dll.a
  Conditionalize the install rules for MINGW and CYGWIN in CMakeLists.txt

Version 1.5.8 [February 1, 2012]
  No changes.

Version 1.5.9beta01 [February 3, 2012]
  Rebuilt configure scripts in the tar distributions.

Version 1.5.9beta02 [February 16, 2012]
  Removed two unused definitions from scripts/pnglibconf.h.prebuilt
  Removed some unused arrays (with #ifdef) from png_read_push_finish_row().
  Removed tests for no-longer-used *_EMPTY_PLTE_SUPPORTED from pngstruct.h

Version 1.5.9rc01 [February 17, 2012]
  Fixed CVE-2011-3026 buffer overrun bug.  This bug was introduced when
    iCCP chunk support was added at libpng-1.0.6. Deal more correctly with the
    test on iCCP chunk length. Also removed spurious casts that may hide
    problems on 16-bit systems.

Version 1.5.9 [February 18, 2012]
  No changes.

Version 1.5.10beta01 [February 24, 2012]
  Removed two useless #ifdef directives from pngread.c and one from pngrutil.c
  Always put the CMAKE_LIBRARY in "lib" (removed special WIN32 case).
  Removed empty vstudio/pngstest directory (Clifford Yapp).
  Eliminated redundant png_push_read_tEXt|zTXt|iTXt|unknown code from
    pngpread.c and use the sequential png_handle_tEXt, etc., in pngrutil.c;
    now that png_ptr->buffer is inaccessible to applications, the special
    handling is no longer useful.
  Fixed bug with png_handle_hIST with odd chunk length (Frank Busse).
  Added PNG_SAFE_LIMITS feature to pnglibconf.dfa and code in pngconf.h
    to reset the user limits to safe ones if PNG_SAFE_LIMITS is defined.
    To enable, use "CPPFLAGS=-DPNG_SAFE_LIMITS_SUPPORTED" on the configure
    command or put "#define PNG_SAFE_LIMITS_SUPPORTED" in pnglibconf.h.
  Revised the SAFE_LIMITS feature to be the same as the feature in libpng16.
  Added information about the new limits in the manual.

Version 1.5.10beta02 [February 27, 2012]
  Updated Makefile.in

Version 1.5.10beta03 [March 6, 2012]
  Removed unused "current_text" members of png_struct and the png_free()
    of png_ptr->current_text from pngread.c
  Added palette-index checking. Issue a png_warning() if an invalid index is
    found.

Version 1.5.10beta04 [March 10, 2012]
  Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition.
  Fixed CMF optimization of non-IDAT compressed chunks, which was added at
    libpng-1.5.4.  It sometimes produced too small of a window.

Version 1.5.10beta05 [March 10, 2012]
  Reject all iCCP chunks after the first, even if the first one is invalid.
  Issue a png_benign_error() instead of png_warning() about bad palette index.
  Fixed an off-by-one error in the palette index checking function.
  Revised example.c to put text strings in a temporary character array
    instead of directly assigning string constants to png_textp members.
    This avoids compiler warnings when -Wwrite-strings is enabled.

Version 1.5.10 [March 29, 2012]
  Prevent PNG_EXPAND+PNG_SHIFT doing the shift twice.
  Revised png_set_text_2() to avoid potential memory corruption (fixes
    CVE-2011-3048, also known as CVE-2012-3425).

Version 1.5.11beta01 [April 28, 2012]
  Revised scripts/makefile.darwin: use system zlib; remove quotes around
    architecture list; add missing ppc architecture; add architecture options
    to shared library link; don't try to create a shared lib based on missing
    RELEASE variable.
  Enable png_set_check_for_invalid_index() for both read and write.
  Removed #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED/#endif in pngpriv.h around
    declaration of png_handle_unknown().
  Added -lssp_nonshared in a comment in scripts/makefile.freebsd
    and changed deprecated NOOBJ and NOPROFILE to NO_OBJ and NO_PROFILE.

Version 1.5.11rc01 [May 23, 2012]
  No changes.

Version 1.5.11rc02 [May 29, 2012]
  Fixed some typos in comments.
  Revised CMakeLists.txt to not attempt to make a symlink under mingw.
  Added two images to contrib/pngsuite (1-bit and 2-bit transparent grayscale),
    and renamed three whose names were inconsistent with those in
    pngsuite/README.txt.

Version 1.5.11rc03 [June 4, 2012]
  Do not depend upon a GCC feature macro being available for use in generating
    the linker mapfile symbol prefix.
  Made fixes for new optimization warnings from gcc 4.7.0. The compiler
    performed an optimization which is safe but then warned about it.
    Changing the type of 'palette_number' in pngvalid.c removes the warning.

Version 1.5.11rc04 [June 6, 2012]
  Improved performance of new do_check_palette_indexes() function.

Version 1.5.11rc05 [June 7, 2012]
  Don't check palette indexes if num_palette is 0 (as it can be in MNG files).

Version 1.5.11 [June 14, 2012]
  Include zlib.h in contrib/gregbook and contrib/visupng examples.

Version 1.5.12 [July 11, 2012]
  Removed scripts/makefile.cegcc from the *.zip and *.7z distributions; it
    depends on configure, which is not included in those archives.
  Changed "a+w" to "u+w" in Makefile.in to fix CVE-2012-3386.

Version 1.5.13beta01 [August 8, 2012]
  Do not compile PNG_DEPRECATED, PNG_ALLOC and PNG_PRIVATE when __GNUC__ < 3.
  Removed references to png_zalloc() and png_zfree() from the manual.
  Revised PNG_FP_EXPORT and PNG_FIXED_EXPORT macros to avoid generating
    lone semicolons (patch ported from libpng-1.6.0beta11).

Version 1.5.13beta02 [September 10, 2012]
  Corrected handling of the image array and the row_pointers array in example.c
  When png_set_filler is used to strip a filler channel during write, the
    code prior to 1.5 would ignore the case where the output required an
    alpha channel or when the output was a palettized PNG.  In libpng-1.5 the
    ignorance was lost and libpng proceeded to strip the channel resulting
    in a bad (potential memory overwrite) failure later.  This reverts
    the behavior to the pre-1.5 state but issues a warning. libpng-1.6 is
    expected to issue an error on the erroneous png_set_filler call.
  Use png_memset() consistently (pngmem.c contained some bare "memset" calls).

Version 1.5.13rc01 [September 17, 2012]
  No changes.

Version 1.5.13 [September 27, 2012]
  No changes.

Version 1.5.14beta01 [October 24, 2012]
  Added -DZ_SOLO to contrib/pngminim/*/makefile to work with zlib-1.2.7
  Warn about the incorrect runtime library setting for VS2010 debug DLL builds.
  Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose() in
    pngrtran.c (Domani Hannes).

Version 1.5.14beta02 [omitted]

Version 1.5.14beta03 [December 15, 2012]
  Added missing "-" in front of DNO_GZIP in contrib/pngminim/*/makefile.
  Check for png_ptr==NULL earlier in png_zalloc().
  Ignore, with a warning, out-of-range value of num_trans in png_set_tRNS().
  Rearranged building of ARM NEON optimizations. The ARM specific code is
    split out entirely to the arm subdirectory and changes to configure.ac and
    Makefile.am to add new stuff are reduced.  Now material code changes,
    although for build test purposes, --enable-arm-neon now builds on non-ARM
    systems.
  Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.12.5.
  Fixed cases of unquoted DESTDIR in Makefile.am
  Fixed a minor bug in types to malloc and major bug in handling compressed
    iTXt. Compressed iTXt could not be handled.

Version 1.5.14beta04 [December 19, 2012]
  Cleaned up whitespace in the synopsis portion of the manpage "libpng.3"
  Disassembled the version number in scripts/options.awk (necessary for
    building on SunOs).

Version 1.5.14beta05 [December 23, 2012]
  Fixed Windows build issues, enabled ARM compilation. Various warnings issued
    by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old
    GCCs.) ARM support is enabled by default in zlib.props (unsupported by
    Microsoft) and ARM compilation is made possible by deleting the check for
    x86. The test programs cannot be run because they are not signed.

Version 1.5.14beta06 [January 1, 2013]
  Discontinued distributing libpng-1.5.14-1.5.13-diff.txt and similar.
  Fixed 'make distcheck' on SUN OS - libpng.so was not being removed

Version 1.5.14beta07 [January 6, 2012]
  Replaced AM_CONFIG_HEADER(config.h) with AC_CONFIG_HEADERS([config.h])
    in configure.ac
  De-configured build fixes to make a range of deconfiguration options (such
    as switching off read or write support) work in more cases.  Also upgraded
    pngtest and pngvalid to the libpng 1.6 versions (with some modifications)
    which provide more extensive testing.  Replaced pngtest.png because pngtest
    writes the ancillary chunks in a different order.

Version 1.5.14beta08 [January 10, 2013]
  Check validity of "num_unknowns" parameter of png_set_unknown_chunks()
    (Bug report from yuris; later assigned CVE-2013-7353).

Version 1.5.14rc01 [January 17, 2013]
  No changes.

Version 1.5.14rc02 [January 17, 2013]
  Revised test for validity of "num_unknowns" to eliminate compiler warnings.

Version 1.5.14rc03 [January 18, 2013]
  Check the validity of the "nentries" parameter of png_set_sPLT() and the
  "num_text" parameter of png_set_text_2() (CVE-2013-7354).

Version 1.5.14 [January 24, 2013]
  Removed an obsolete line from the manual.

Version 1.5.15beta01 [February 4, 2013]
  Enabled renaming of the extern (but not DLL exported) ARM filter functions.
    Also enabled inclusion of pngpriv.h in non-C files by preventing C/C++
    specific definitions if PNG_VERSION_INFO_ONLY is defined.
  Added png_get_palette_max() function.

Version 1.5.15beta02 [February 5, 2013]
  Made a probably general fix for the preprocessing used to generate source
    files. This change might make the check for a special C preprocessor
    unnecessary, and it also eliminates the requirement for sed in the
    configure build process.
  Fix typo in Makefile.am, fix scripts/pnglibconf.mak and makefile.std
  Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.13
  Fix 'setting' handling in options.awk and fixed palette_max API

Version 1.5.15beta03 [February 7, 2013]
  Remove SUN OS cc -E workround - no longer required
  Turn serial tests back on (recently turned off by autotools upgrade).

Version 1.5.15beta04 [February 15, 2013]
  Enclosed the new png_get_palette_max in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
    block, and revised pnglibconf.h and pnglibconf.h.prebuilt accordingly.

Version 1.5.15beta05 [February 17, 2013]
  Use approved/supported Android method to check for NEON, use Linux/POSIX
    1003.1 API to check /proc/self/auxv avoiding buffer allocation and other
    library calls.
  Fixed a race condition in the creation of the build 'scripts' directory
    while building with a parallel make.
  Use parentheses more consistently in "#if defined(MACRO)" tests.

Version 1.5.15beta06 [February 22, 2013]
  Fixed PNG_ALIGN(ED)_MEMORY and add ability to turn off ARM_NEON
    runtime checks
  Updated the INSTALL document.

Version 1.5.15beta07 [February 27, 2013]
  Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
  Revised scripts/makefile.freebsd to respect ZLIBLIB and ZLIBINC.
  Revised scripts/dfn.awk to work with the buggy MSYS awk that has trouble
    with CRLF line endings.

Version 1.5.15beta08 [March 5, 2013]
  Avoid a possible memory leak in contrib/gregbook/readpng.c
  Made the _SUPPORTED macro definitions consistent. The change made in
    libpng15 to #define *_SUPPORTED 1, to match the use of -D*_SUPPORTED
    (which means -D*_SUPPORTED=1) and avoid compiler warnings from GCC was made
    inconsistently and causes problems as a result, also some additions in
    pnglibconf.h.prebuilt were inconsistent (omitting the 1). This changes 1.5
    back to the scheme used both before (1.4) and after (1.6). This might cause
    some build scripts to issue warnings, and might, in the extreme, cause some
    applications to fail (but they would fail anyway against 1.6).  It seems
    safer to go for consistency, given the change in 1.6, not correctness here,
    particularly as 'make check' currently warns anyway on the symbols.dfn check
    because of the inconsistencies.
  Corrected Android builds and corrected libpng.vers with symbol
    prefixing This adds an API to set optimization options externally,
    providing an alternative and general solution for the non-portable
    run-time tests used by the ARM Neon code.  It also makes those tests
    compile and link on Android.
  The order of settings vs options in pnglibconf.h is reversed to allow
    settings to depend on options and options can now set (or override) the
    defaults for settings.

Version 1.5.15beta09 [March 13, 2013]
  Fixed CMakelists.txt to allow building a single variant of the library
    (Claudio Bley):
  Introduced a PNG_LIB_TARGETS variable that lists all activated library
    targets.  It is an error if this variable ends up empty, ie. you have
    to build at least one library variant.
  Made the *_COPY targets only depend on library targets actually being build.
  Use PNG_LIB_TARGETS to unify a code path.
  Changed the CREATE_SYMLINK macro to expect the full path to a file as the
    first argument. When symlinking the filename component of that path is
    determined and used as the link target.
  Use copy_if_different in the CREATE_SYMLINK macro.
  Eliminated two warnings from the Intel C compiler. The warnings are
    technically valid, although a reasonable treatment of division would
    show it to be incorrect.

Version 1.5.15rc01 [March 21, 2013]
  No changes.

Version 1.5.15 [March 28, 2013]
  No changes.

Version 1.5.16beta01 [April 25, 2013]
  Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c
    (Flavio Medeiros).
  Revised stack marking in arm/filter_neon.S and configure.ac.
  Ensure that NEON filter stuff is completely disabled when switched 'off'.
    Previously the ARM NEON specific files were still built if the option
    was switched 'off' as opposed to being explicitly disabled.
  Avoid a compiler warning about unused png_ptr in translate_gamma_flags()

Version 1.5.16beta02 [April 26, 2013]
  Revise pngtest.c to skip tests of unsupported features.
  Regenerated configure files.

Version 1.5.16beta03 [April 26, 2013]
  Test for 'arm*' not just 'arm' in the host_cpu configure variable.

Version 1.5.16beta04 [May 1, 2013]
  Expanded manual paragraph about writing private chunks, particularly
    the need to call png_set_keep_unknown_chunks() when writing them.

Version 1.5.16beta05 [May 9, 2013]
  Updated contrib/pngminus/pnm2png.c (Paul Stewart):
    Check for EOF
    Ignore "#" delimited comments in input file to pnm2png.c.
    Fixed whitespace handling
    Added a call to png_set_packing()
    Initialize dimension values so if sscanf fails at least we have known
      invalid values.

Version 1.5.16beta06 [May 12, 2013]
  Allow contrib/pnminus/pnm2png.c to compile without WRITE_INVERT and WRITE_PACK
    supported (writes error message that it can't read P1 or P4 PBM files).
  Revised contrib/pngminim/*/makefile to separate CPPFLAGS and CFLAGS, and
    to generate pnglibconf.h with the right zlib header files.
  Ported contrib/pngminus/pnm2png.c changes back from libpng-1.6.3beta06,
    to use unsigned long, not png_uint_32 arguments to sscanf().

Version 1.5.16rc01 [May 16, 2013]
  No changes.

Version 1.5.16 [May 23, 2013]
  No changes.

Version 1.5.17beta01 [June 8, 2013]
  Removed a redundant test from png_set_IHDR().
  Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt (Andrew Hundt)
  Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt
  Make ARM NEON support work at compile time (not just configure time).
    This moves the test on __ARM_NEON__ into pngconf.h to avoid issues when
    using a compiler that compiles for multiple architectures at one time.
  Removed PNG_FILTER_OPTIMIZATIONS and PNG_ARM_NEON_SUPPORTED from
    pnglibconf.h, allowing more of the decisions to be made internally
    (pngpriv.h) during the compile.  Without this, symbol prefixing is broken
    under certain circumstances on ARM platforms.  Now only the API parts of
    the optimizations ('check' vs 'api') are exposed in the public header files
    except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
    decision about whether or not to use the optimizations.
  Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage.
    Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
    on __ARM_NEON__ from configure time to compile time.  This breaks symbol
    prefixing because the definition of the special png_init_filter_functions
    call was hidden at configure time if the relevant compiler arguments are
    passed in CFLAGS as opposed to CC.  This change attempts to avoid all
    the confusion that would result by declaring the init function even when
    it is not used, so that it will always get prefixed.

Version 1.5.17rc01 [June 17, 2013]
  No changes.

Version 1.5.17rc02 [June 18, 2013]
  Revised libpng.3 so that "doclifter" can process it.

Version 1.5.17rc03 [June 25, 2013]
  Revised example.c to illustrate use of PNG_DEFAULT_sRGB and PNG_GAMMA_MAC_18
    as parameters for png_set_gamma().  These have been available since
    libpng-1.5.4.

Version 1.5.17 [June 27, 2013]
  No changes.

Version 1.5.18beta01 [August 21, 2013]
  Delay calling png_init_filter_functions() until a row with nonzero filter
    is found.

Version 1.5.18beta02 [December 26, 2013]
  Changed tabs to 3 spaces in png_debug macros and changed '"%s"m'
    to '"%s" m' to improve portability among compilers.
  Added "-Wall" to CFLAGS in contrib/pngminim/*/makefile
  Conditionally compile some unused functions reported by -Wall in
    pngminim.
  Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
    in the tar distributions.

Version 1.5.18beta03 [January 1, 2014]
  Fixed 'unused' warnings and merged with libpng16 pngvalid.
    Various warnings revealed by configurations added to the tested
    configurations in libpng 1.6 need corresponding fixes in libpng 1.5.
    This takes the libpng 1.6 pngvalid.c and adds it back to libpng 1.5,
    however one write-only test is currently disabled because it does not
    work; possibly because of failures to reset or initialize the deflate
    stream correctly in write-only cases.
  Merged libpng-1.7 changes and created a single pngvalid.c
  Merged pngvalid and pngtest from libpng-1.5; made compressed chunks
    after IDAT work with the progressive read code (this is a minor and
    somewhat ugly fix-up; the proper fix is in 1.6).
  The 'make all-am' command no longer builds $(check_PROGRAMS), leading
    to a lack of checks on cross-builds such as ARM.  Makefile.am also
    requires correct dependencies for the check programs on pnglibconf.h
    otherwise parallel builds on fast machines can sometimes pick up the
    system pnglibconf.h.
  Rebuilt configure scripts with automake 1.14.1 and autoconf-2.69.
  Require automake-1.13 and enable automake "subdirs" feature in autoconf.ac
  Allow unversioned links created on install to be disabled in configure.
    In configure builds 'make install' changes/adds links like png.h
    and libpng.a to point to the newly installed, versioned, files (e.g.
    libpng17/png.h and libpng17.a). Three new configure options and some
    rearrangement of Makefile.am allow creation of these links to be disabled.

Version 1.5.18beta04 [January 10, 2014]
  Removed potentially misleading warning from png_check_IHDR().

Version 1.5.18beta05 [January 20, 2014]
  Updated scripts/makefile.* to use CPPFLAGS (Cosmin)

Version 1.5.18rc01 [January 28, 2014]
  No changes.

Version 1.5.18rc02 [January 30, 2014]
  Quiet an uninitialized memory warning from VC2013 in png_get_png().

Version 1.5.18 [February 6, 2014]
  No changes.

Version 1.5.19beta01 [February 26, 2014]
  Moved redefines of png_error(), png_warning(), png_chunk_error(),
    and png_chunk_warning() from pngpriv.h to png.h to make them visible
    to libpng-calling applications.
  Fixed typos in the manual and in scripts/pnglibconf.dfa (CFLAGS -> CPPFLAGS
    and PNG_USR_CONFIG -> PNG_USER_CONFIG).

Version 1.5.19beta02 [March 17, 2014]
  Use "if (value != 0)" instead of "if (value)" consistently.
  Moved configuration information from the manual to the INSTALL file.

Version 1.5.19beta03 [April 6, 2014]
  Removed #if/#else/#endif from inside two pow() calls in pngvalid.c because
    they were handled improperly by Portland Group's PGI-14.1 - PGI-14.3
    when using its "__builtin_pow()" function.
  Silence 'unused parameter' build warnings (Cosmin).
  $(CP) is now used alongside $(RM_F).  Also, use 'copy' instead
    of 'cp' where applicable, and applied other minor makefile changes.
  Don't warn about invalid dimensions exceeding user limits.
  Allow an easy replacement of the default pre-built configuration
    header with a custom header, via the make PNGLIBCONF_H_PREBUILT
    macro.
  Fixed a typo in pngrutil.c, introduced in libpng-1.5.6, that interferes
    with "blocky" expansion of sub-8-bit interlaced PNG files (Eric Huss).

Version 1.5.19beta04 [August 4, 2014]
  Removed scripts/makefile.elf. It has not worked since libpng-1.5.0beta14
    due to elimination of the PNG_FUNCTION_EXPORT and PNG_DATA_EXPORT
    definitions from pngconf.h.

Version 1.5.19beta05 [August 8, 2014]
  Added opinion that the ECCN (Export Control Classification Number) for
    libpng is EAR99 to the README file.
  Eliminated use of "$<" in makefile explicit rules, when copying
    $PNGLIBCONF_H_PREBUILT.  This does not work on some versions of make;
    bug introduced in libpng version 1.5.19beta03.

Version 1.5.19rc01 [August 14, 2014]
  Made "ccopts" agree with "CFLAGS" in scripts/makefile.hp* and makefile.*sunu

Version 1.5.19 [August 21, 2014]
  Added PNG_UNUSED(png_ptr) and PNG_UNUSED(val) in png_longjmp() (Cosmin).

Version 1.5.20beta01 [November 6, 2014]
  Removed "option WRITE_COMPRESSED_TEXT enables WRITE_TEXT" from pnglibconf.dfa
  Only mark text chunks as written after successfully writing them.
  Fixed an out-of-range read in png_user_version_check() (Bug report from
    Qixue Xiao, CVE-2015-8540).
  Simplified and future-proofed png_user_version_check().

Version 1.5.20beta02 [November 10, 2014]
  Quieted three "comparison is always false due to limited range" compiler
    warnings in pngset.c

Version 1.5.20rc01 [November 13, 2014]

Version 1.5.20rc02 [November 14, 2014]]
  The macros passed in the command line to Borland make were ignored if
    similarly-named macros were already defined in makefiles. This behavior
    is different from POSIX make and other make programs.  Surround the
    macro definitions with ifndef guards (Cosmin).
  Use memcpy instead of CopyMemory in the definition of png_memcpy.
    The Borland C++ build breaks otherwise (Cosmin).

Version 1.5.20rc03 [November 17, 2014]
  Added "-D_CRT_SECURE_NO_WARNINGS" to CFLAGS in scripts/makefile.vcwin32
  Removed the obsolete $ARCH variable from scripts/makefile.darwin.

Version 1.5.20 [November 20, 2014]
  No changes.

Version 1.5.21beta01 [December 14, 2014]
  Revised Makefile.am and scripts/*.dfn to work with MinGW/MSYS;
    renamed scripts/*.dfn to scripts/*.c (Bob Friesenhahn and John Bowler).

Version 1.5.21rc01 [December 21, 2014]
  Restored a test on width that was removed from png.c at libpng-1.6.9
    (Bug report by Alex Eubanks, CVE-2015-0973).

Version 1.5.21rc02 [December 21, 2014]
  Undid the update to pngrutil.c in 1.6.16rc01.

Version 1.5.21rc03 [December 21, 2014]
  Fixed an overflow in png_combine_row with very wide interlaced images
    (Bug report and fix by John Bowler, CVE-2014-9495).

Version 1.5.21 [December 22, 2014]
  No changes.

Version 1.5.22beta01 [January 29, 2015]
  Regenerated configure scripts with libtool-2.4.4
  Made the check for out-of-range values in png_set_tRNS() detect
    values that are exactly 2^bit_depth, and work on 16-bit platforms.
  Quieted some warnings from Coverity-scan.

Version 1.5.22beta02 [February 17, 2015]
  Merged pngtest.c with libpng-1.6.17/pngtest.c
  Display user limits in the output from pngtest.
  Eliminated the PNG_SAFE_LIMITS macro and restored the 1-million-column
    and 1-million-row default limits in pnglibconf.dfa, that can be reset
    by the user at build time or run time.  This provides a more robust
    defense against DOS and as-yet undiscovered overflows.

Version 1.5.22beta03 [February 21, 2015]
  Added PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED macro, on by default.
  Allow user to call png_get_IHDR() with NULL arguments (Reuben Hawkins).
  Rebuilt configure scripts with automake-1.15 and libtool-2.4.6

Version 1.5.22beta04 [February 25, 2015]
  Relocated a misplaced "}" in png_reciprocal2().

Version 1.5.22rc01 [March 4, 2015]
  No changes.

Version 1.5.22rc02 [March 9, 2015]
  Removed some comments that the configure script did not handle
    properly from scripts/pnglibconf.dfa and pnglibconf.h.prebuilt.
  Merged png_free_data() with libpng-1.6.17

Version 1.5.22rc03 [March 12, 2015]
  Updated CMakeLists.txt to add OSX framework, change YES/NO to ON/OFF
    for consistency, and remove some useless tests (Alexey Petruchik).

Version 1.5.22rc04 [March 16, 2015]
  Remove pnglibconf.h, pnglibconf.c, and pnglibconf.out instead of
    pnglibconf.* in "make clean" (Cosmin).
  Fix incorrect calculation of maximum number of unknown chunks or
    sPLT chunks to be stored (John Bowler).

Version 1.5.22 [March 26, 2015]
  No changes.

Version 1.5.23beta01 [May 21, 2015]
  Removed unused PNG_SET_CHUNK_[CACHE|MALLOC]_LIMIT_SUPPORTED definitions
    from pnglibconf.h.prebuilt (Andrew Church).
  Replaced "unexpected" with an integer in pngset.c where a long was
    expected, to avoid a compiler warning when PNG_DEBUG > 1.
  Fix typecast in a png_debug2() statement in png_set_text_2() to
    avoid a compiler warning in PNG_DEBUG builds.
  Avoid Coverity issue 80858 (REVERSE NULL) in pngtest.c PNG_DEBUG builds.
  Avoid a harmless potential integer overflow in png_XYZ_from_xy() (Bug
    report from Christopher Ferris).

Version 1.5.23beta02 [June 30, 2015]
  Removed WRITE_WEIGHTED_FILTERED code, to save a few kbytes of the
    compiled library size. It never worked properly and as far as we can
    tell, no one uses it. The png_set_filter_heuristics() and
    png_set_filter_heuristics_fixed() APIs are retained but deprecated
    and do nothing.
  Quieted Coverity issues in pngvalid.c.
  Removed non-working progressive reader 'skip' function.

Version 1.5.23rc01 [July 9, 2015]
  Belatedly added Mans Rullgard to the list of Contributing Authors.

Version 1.5.23rc02 [July 12, 2015]
  Restored unused FILTER_HEURISTIC macros removed at libpng-1.5.23beta02
    to png.h to avoid compatibility warnings.

Version 1.5.23rc03 [July 15, 2015]
  Minor editing of the man page.

Version 1.5.23 [July 23, 2015]
  No changes.

Version 1.5.24beta01 [August 19, 2015]
  Avoid potentially dereferencing NULL info_ptr in png_info_init_3().
  Eliminated unused PNG_COST_SHIFT, PNG_WEIGHT_SHIFT, PNG_COST_FACTOR, and
    PNG_WEIGHT_FACTOR macros.
  Fixed potential leak of png_pixels in contrib/pngminus/pnm2png.c
  Fixed uninitialized variable in contrib/gregbook/rpng2-x.c
  Fixed some bad links in the man page.
  Safely convert num_bytes to a png_byte in png_set_sig_bytes() (Robert
    Seacord).
  Fixed the recently reported 1's complement security issue by replacing
    the value that is illegal in the PNG spec, in both signed and unsigned
    values, with 0. Illegal unsigned values (anything greater than or equal
    to  0x80000000) can still pass through, but since these are not illegal
    in ANSI-C (unlike 0x80000000 in the signed case) the checking that
    occurs later can catch them (John Bowler).

Version 1.5.24beta02 [October 15, 2015]
  Fixed png_save_int_32 when int is not 2's complement (John Bowler).
  Fixed byte order in png_do_read_filler() with 16-bit input (previously
    fixed in libpng-1.6.17 and 1.7.0beta46). Previously the high and
    low bytes of the filler, from png_set_filler() or from
    png_set_add_alpha(), were read in the wrong order.
  Merged pngvalid.c with version 1.6.19.
  Added sPLT support to pngtest.c

Version 1.5.24rc01 [October 31, 2015]
  Prevent writing over-length PLTE chunk (Cosmin Truta).
  Libpng incorrectly calculated the output rowbytes when the application
    decreased either the number of channels or the bit depth (or both) in
    a user transform.  This was safe; libpng overallocated buffer space
   (potentially by quite a lot; up to 4 times the amount required) but,
   from 1.5.4 on, resulted in a png_error (John Bowler).
  Silently truncate over-length PLTE chunk while reading.

Version 1.5.24rc02 [November 3, 2015]
  Fixed some inconsequential cut-and-paste typos in png_set_cHRM_XYZ_fixed().
  Clarified COPYRIGHT information to state explicitly that versions
    are derived from previous versions.
  Removed much of the long list of previous versions from png.h and
    libpng.3.

Version 1.5.24rc03 [omitted]

Version 1.5.24rc04 [November 5, 2015]
  Fixed new bug with CRC error after reading an over-length palette
    (bug report by Cosmin Truta) (CVE-2015-8126).

version 1.5.24 [November 12, 2015]
  Cleaned up coding style in png_handle_PLTE().

version 1.5.25beta01 [November 20, 2015]
  Avoid potential pointer overflow in png_handle_iTXt(), png_handle_zTXt(),
    png_handle_sPLT(), and png_handle_pCAL() (Bug report by John Regehr).

version 1.5.25beta02 [November 23, 2015]
  Fixed incorrect implementation of png_set_PLTE() that uses png_ptr
    not info_ptr, that left png_set_PLTE() open to the CVE-2015-8126
    vulnerability.  Fixes CVE-2015-8472.

version 1.5.25beta03 [November 24, 2015]
  Backported tests from libpng-1.7.0beta69.

version 1.5.25rc01 [November 26, 2015]
  No changes.

version 1.5.25 [December 3, 2015]
  No changes.

version 1.5.26beta01 [December 11, 2015]
  Fixed an out-of-range read in png_check_keyword() (Bug report from
    Qixue Xiao, CVE-2015-8540).

version 1.5.26rc01 [December 14, 2015]
  Corrected copyright dates in source files.
  Moved png_check_keyword() from pngwutil.c to pngset.c
  Added keyword checks to pngset.c (John Bowler).

version 1.5.26 [December 17, 2015]
  No changes.

version 1.5.27beta01 [March 9, 2016]
  Removed LE/BE dependencies in pngvalid, to 'fix' the current problem
    in the BigEndian tests by not testing it, making the BE code the same 
    as the LE version.
  Fixes to pngvalid for various reduced build configurations (eliminate unused
    statics) and a fix for the case in rgb_to_gray when the digitize option
    reduces graylo to 0, producing a large error.
  Widened the 'limit' check on the internally calculated error limits in
    the 'DIGITIZE' case (the code used prior to 1.7 for rgb_to_gray error
    checks) and changed the check to only operate in non-release builds
   (base build type not RC or RELEASE.)
  Fixed undefined behavior in pngvalid.c, undefined because
    (png_byte) << shift is undefined if it changes the signed bit
    (because png_byte is promoted to int). The libpng exported functions
    png_get_uint_32 and png_get_uint_16 handle this. (Bug reported by
    David Drysdale as a result of reports from UBSAN in clang 3.8).
  This changes pngvalid to use BE random numbers; this used to produce
    errors but these should not be fixed as a result of the previous changes.
  In projects/vstudio, combined readme.txt and WARNING into README.txt
  Worked around a false-positive Coverity issue in pngvalid.c.
  Only use exit(77) from pngvalid.c in configure builds.
  Updated CMakeLists.txt, added supporting scripts/gen*.cmake.in
    and test.cmake.in (Roger Leigh).
  Added a common-law trademark notice and export control information
    to the LICENSE file, png.h, and the man page.
  Changed PNG_INFO_cHNK and PNG_FREE_cHNK from 0xnnnn to 0xnnnnU in png.h
    (Robert C. Seacord).
  Fixed some misleading indentation in pngvalid.c (Krishnaraj Bhat).

version 1.5.27beta02 [May 11, 2016]
  Fixed typo (missing underscore) in #define PNG_READ_16_TO_8_SUPPORTED
    Bug report by (Y.Ohashik).
  Added PNG_FAST_FILTERS macro (defined as
    PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP).

version 1.5.27rc01 [May 14, 2016]
  No changes.

version 1.5.27 [May 26, 2016]
  No changes.

version 1.5.28rc01 [December 27, 2016]
  Merged with current libpng16 gregbook, pngvalid.c, pngtest.c, pngminim,
    pngminus
  Fixed undefined behavior in png_push_save_buffer(). Do not call
    memcpy() with a null source, even if count is zero (Leon Scroggins III).
  Added "Common linking failures" section to INSTALL.
  Merge contrib/pngminim/*/makefile with libpng-1.6.24
  Minor editing of INSTALL, (whitespace, added copyright line)
  Removed the use of a macro containing the pre-processor 'defined'
    operator.  It is unclear whether this is valid; a macro that
    "generates" 'defined' is not permitted, but the use of the word
    "generates" within the C90 standard seems to imply more than simple
    substitution of an expression itself containing a well-formed defined
    operation.
  Previously the pngtrans.c code always resulted in an unsigned arithmetic
    overflow. This is well defined but produces errors from clang with the
    option to detect unsigned overflow. As the expression only gets
    evaluated once per row in this version of libpng it is easier just
    to rewrite it.
  The previous version of png.c produced a signed overflow as a result of
    both the "& 0xffff" on the most significant bits of a negative argument;
    this converted (-1) into 65535 which resulted in a subsequent overflow.
    Since signed overflow is undefined in C90 the code has been modified to
    correctly calculate a signed result.  This requires changing the 'hi'
    result parameter to a signed value.
  This has been code reviewed solely by the author.  A further code review
    is highly desireable.  Nevertheless the code compiles without warnings
    from clang and without the prior detection of an overflow.  Since it no
    longer truncates any of the intermediate values this should be enough to
    ensure that it is correct.

version 1.5.28 [December 29, 2016]
  Fixed a potential null pointer dereference in png_set_text_2() (bug report
    and patch by Patrick Keshishian, CVE-2016-10087).

version 1.5.29beta01 [April 1, 2017]
  Suppress clang warnings about implicit sign changes in png.c
  Avoid potential overflow of shift operations in png_do_expand() (Aaron Boxer).
  Added missing "$(CPPFLAGS)" to the compile line for c.pic.o in
    makefile.linux and makefile.solaris-x86 (Cosmin).
  Silence clang -Wcomma warnings (Viktor Szakats).
  Update Sourceforge URLs in documentation (https instead of http).

version 1.5.29beta02 [August 9, 2017]
  Added png_check_chunk_length() function (Fixes CVE-2017-12652).
  Moved chunk-name and chunk-length checks into PNG_EXTERN private
    png_check_chunk_name() and png_check_chunk_length() functions
    (Suggested by Max Stepin).
  Merged pngtest.c with libpng-1.6.32.
  Check for 0 return from png_get_rowbytes() in contrib/pngminus/*.c to stop
    some Coverity issues (162705, 162706, and 162707).
 
version 1.5.29rc01 [August 19, 2017]
  No changes.
 
version 1.5.29 [September 28, 2017]
  No changes.

Version 1.5.30beta01 [August 28, 2017]
  Added PNGMINUS_UNUSED macro to contrib/pngminus/p*.c and added missing
    parenthesis in contrib/pngminus/pnm2png.c (bug report by Christian Hesse).
  Fixed off-by-one error in png_do_check_palette_indexes() (Bug report
    by Mick P., Source Forge Issue #269).

Version 1.5.30beta02 [September 14, 2017]
  Compute a larger limit on IDAT because some applications write a deflate
    buffer for each row (Bug report by Andrew Church).
  Fixed incorrect typecast of some arguments to png_malloc() and
    png_calloc() that were png_uint_32 instead of png_alloc_size_t
    (Bug report by "irwir" in Github libpng issue #175).

Version 1.5.30rc01 [September 20, 2017]
  Initialize memory allocated by png_inflate to zero, using memset, to
    stop an oss-fuzz "use of uninitialized value" detection in png_set_text_2()
    due to truncated iTXt or zTXt chunk.

Version 1.5.30 [September 28, 2017]

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
#endif
