
Libpng 1.0.14 - July 8, 2002

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

Changes since the last public release (1.0.13):

  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
  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.
  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.
  Fixed bug in reporting number of channels in pngget.c, introduced in
    version 1.2.2
  Added "libpng.pc" dependency to the "install-shared" target in 15 makefiles.
  Remove old libpng.pc and libpngNN.pc before installing new ones.
  Revised 15 makefiles to build libpng-config and libpngNN-config from
    libpng-config-*.in.
  Added "Win32 DLL VB" configuration to projects/msvc/libpng.dsp
  Changed "error" and "message" in prototypes to "error_message" and
    "warning_message" to avoid namespace conflict.
  Restored png_zalloc and png_zfree to nonexported form as in libpng-1.2.1.
  Removed description of png_set_mem_fn() from documentation.
  Revised projects/msvc/README.txt
  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.
  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" targets to makefile.linux, makefile.gcmmx,
    makefile.sgi, makefile.sggcc, makefile.32sunu, makefile.64sunu,
    makefile.beos, makefile.darwin, makefile.dec, makefile.macosx, 
    makefile.solaris, makefile.sco, makefile.cygwin, makefile.hpux,
    makefile.hpgcc, and makefile.so9.
  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.
  Revised pnggccrd.c to be able to back out version 1.0.x via PNG_1_0_X macro.
  Changed png_warning() to png_error() when width is too large to process.

Send comments/corrections/commendations to
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu

Glenn R-P
