#if 0
changes(){ /*
CHANGES - changes for libpng

version 0.2
  added reader into png.h
  fixed small problems in stub file

version 0.3
  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
  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
  interfaced with zlib 0.8
  fixed many reading and writing bugs
  saved using 3 spaces instead of tabs

version 0.6
  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
  cleaned up lots of bugs
  finished dithering and other stuff
  added test program
  changed name from pnglib to libpng

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

version 0.8
  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() behaviour
  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 behaviour
  tested NODIV support and made it default behaviour (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]
  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.
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".
  #ifdef out 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.
  #ifdef'ed out 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 in png_handle_tRNS()
  Fixed integer arithmetic overflow vulnerability 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
  #ifdef 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.ac, 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.

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 intruduced 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]
  Turned off PNG_READ_DITHER_SUPPORTED by default.

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 pngprefs.h and MMX from makefiles
  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
    but was never defined (again).
  Rebuilt configure scripts with autoconf-2.61 instead of 2.60

version 1.4.0betaN [future]
  Build shared libraries with -lz and sometimes -lm.

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
