			GIFLIB NEWS

Repository head
===============

This is a point release intended to clear up a couple of CVEs and
apply point fixes that have been accumulating since 5.2.1 There are a
few unresolved (but minor) memory leaks related to design issues in
the API that still need to be resolved.

Code Fixes
----------

* Fixes for CVE-2023-48161, CVE-2022-28506, 

* Address SF issue #138 Documentation for obsolete utilities still installed

* Address SF issue #139: Typo in "LZW image data" page ("110_2 = 4_10")

* Address SF issue #140: Typo in "LZW image data" page ("LWZ")

* Address SF issue #141: Typo in "Bits and bytes" page ("filed")

* Note as already fixed SF issue #143: cannot compile under mingw

* Address SF issue #144: giflib-5.2.1 cannot be build on windows and other platforms using c89

* Address SF issue #145: Remove manual pages installation for binaries that are not installed too

* Address SF issue #146: [PATCH] Limit installed man pages to binaries, move giflib to section 7

* Address SF issue #147 [PATCH] Fixes to doc/whatsinagif/ content

* Address SF issue #148: heap Out of Bound Read in gif2rgb.c:298 DumpScreen2RGB

* Declared no-info on SF issue #150: There is a denial of service vulnerability in GIFLIB 5.2.1

* Declared Won't-fix on SF issue 149: Out of source builds no longer possible

* Address SF issue #151: A heap-buffer-overflow in gif2rgb.c:294:45

* Address SF issue #152: Fix some typos on the html documentation and man pages

* Address SF issue #153: Fix segmentation faults due to non correct checking for args

* Address SF issue #154: Recover the giffilter manual page

* Address SF issue #155: Add gifsponge docs

* Address SF issue #157: An OutofMemory-Exception or Memory Leak in gif2rgb

* Address SF issue #158: There is a null pointer problem in gif2rgb

* Address SF issue #159 A heap-buffer-overflow in GIFLIB5.2.1 DumpScreen2RGB() in gif2rgb.c:298:45

* Address SF issue #163: detected memory leaks in openbsd_reallocarray giflib/openbsd-reallocarray.c

* Address SF issue #164: detected memory leaks in GifMakeMapObject giflib/gifalloc.c

* Address SF issue #166: a read zero page leads segment fault in getarg.c and memory leaks in gif2rgb.c and gifmalloc.c

* Address SF issue #167: Heap-Buffer Overflow during Image Saving in DumpScreen2RGB Function at Line 321 of gif2rgb.c

Version 5.2.1
==============

This is the "Maybe I shouldn't have done a release while in surgical recovery" release.

* In gifbuild.c, avoid a core dump on no color map.

* Restore inadvertently removed library version numbers in Makefile.

Version 5.2.0
=============

The undocumented and deprecated GifQuantizeBuffer() entry point
has been moved to the util library to reduce libgif size and attack
surface. Applications needing this function are couraged to link the
util library or make their own copy.

The following obsolete utility programs are no longer installed:
gifecho, giffilter, gifinto, gifsponge. These were either installed in
error or have been obsolesced by modern image-transformation tools
like ImageMagick convert. They may be removed entirely in a future
release.

* Address SourceForge issue #136: Stack-buffer-overflow in gifcolor.c:84

* Address SF bug #134: Giflib fails to slurp significant number of gifs

* Apply SPDX convention for license tagging.

Version 5.1.9
=============

The documentation directory now includes an HTMlified version of the
GIF89 standard, and a more detailed description of how LZW compression
is applied to GIFs.

* Address SF bug #129: The latest version of giflib cannot be build on windows.

* Address SF bug #126: Cannot compile giflib using c89

Version 5.1.8
=============

* Address SF bug #119: MemorySanitizer: FPE on unknown address. This is CVE-2019-15133

* Address SF bug #125: 5.1.7: xmlto is still required for tarball

* Address SF bug #124: 5.1.7: ar invocation is not crosscompile compatible

* Address SF bug #122: 5.1.7 installs manpages to wrong directory

* Address SF bug #121: make: getversion: Command not found

* Address SF bug #120: 5.1.7 does not build a proper library - no 

Version 5.1.7
=============

Correct a minor packaging error (superfluous symlinks) in the 5.1.6 tarballs.

Version 5.1.6
=============

Build Fixes
-----------

Fix library installation in the Makefile.

Version 5.1.5
=============

Code Fixes
----------

* Fix SF bug #114: Null dereferences in main() of gifclrmp

* Fix SF bug #113: Heap Buffer Overflow-2 in function DGifDecompressLine()
  in cgif.c.  This had been assigned CVE-2018-11490.

* Fix SF bug #111: segmentation fault in PrintCodeBlock

* Fix SF bug #109: Segmentation fault of giftool reading a crafted file

* Fix SF bug #107: Floating point exception in giftext utility

* Fix SF bug #105: heap buffer overflow in DumpScreen2RGB in gif2rgb.c:317

* Fix SF bug #104: Ineffective bounds check in DGifSlurp

^ Fix SF bug #103: GIFLIB 5.1.4: DGifSlurp fails on empty comment

* Fix SF bug #87: Heap buffer overflow in 5.1.2 (gif2rgb).

Build Fixes
-----------

The horrible old autoconf build system has been removed with extreme prejudice. 
You now build this simply by running "make" from the top-level directory.

Version 5.1.4
=============

Code Fixes
----------

* Fix SF bug #94: giflib 5 loves to fail to load images... a LOT.

* Fix SF Bug #92: Fix buffer overread in gifbuild.

* Fix SF Bug #93: Add bounds check in gifbuild netscape2.0 path

* Fix SF Bug #89: Fix buffer overread in gifbuild.

Version 5.1.3
=============

As of this version the library and code has been seriously abused by fuzzers,
smoking out crash bugs (now fixed) induced by various kinds of severely
malformed GIF.

Code Fixes
----------

* Prevent malloc randomess from causing the header output routine to emit
  a GIF89 version string even when no GIF89 features are present. Only
  breaks tests, not production code, but it's odd this wasn't caught sooner.

* Prevent malloc randomess from producing sporadic failures by causing
  sanity checks added in 5.1.2 to misfire.

* Bulletproof gif2rgb against 0-height images. Addressed SF bug #78:
  Heap overflow in gif2rgb with images of size 0, also SF bug #82.

* Remove unnecessary duplicate EGifClose() in gifcolor.c. Fixes SF bug #83
  introduced in 5.1.2.

* Fix SF Bug #84: incorrect return of DGifSlurp().

Version 5.1.2
=============

Code Fixes
----------

* Code hardening using reallocarray() from OpenBSD.

* Sanity check in giffilter catches files with malformed extension records
  Fixes SourceForge bug #63: malformed gif causes segfault in giffilter.

* Inexpensive sanity check in DGifSlurp() catches malformed files with
  no image descriptor. Fixes SourceForge bug #64: malformed gif causes
  crash in giftool.

* Fix SourceForge bug #66: GifDrawBoxedText8x8() modifying constant input
  parameter.

* Bail out of GIF read on invalid pixel width. Addresses Savannah bug
  #67: invalid shift in dgif_lib.c

* Fix SourceForge bug #69: #69 Malformed: Gif file with no extension
  block after a GRAPHICS_EXT_FUNC_CODE extension causes segfault (in
  giftext).

* Fix SourceForge bug #71: Buffer overwrite when giffixing a malformed gif.

* Fix SourceForge bug #73: Null pointer deference in gifclrmap (only
  reachable with malformed GIF).

* Fix SourceForge bug #74: Double free in gifsponge under 5.1.1,
  for any valid gif image.

* Fix SourceForge bug #75: GAGetArgs overflows due to uncounted use of va_arg.

* Sanity check in giffix catches some malformed files. Addresses
  SourceForge bug #77: dgif_lib.c: extension processing error


Version 5.1.1
=============

Code Fixes
----------

* Numerous minor fixes in getarg.c. Affects only the utilities, not the
  core library.

* Fix SourceForge bug #59: DGifOpen can segfault if DGifGetScreenDesc fails.

* SourceForge patch #20: In gifalloc, fix usage of realloc() in case of failure.

* Fix SourceForge bug #61 Leak in gifsponge.

Build Fixes
----------

* glibtoolize port fix for OS X.

Version 5.1.0
=============

Changes to the API require a library major-version bump.

Code Fixes
----------

* A small change to the API: DGifClose() and EGifClose() now take a
  pointer-to-int second argument (like the corresponding openers)
  where a diagnostic code will be deposited when they return
  GIF_ERROR.  This replaces the old behavior in which the GifFile
  structure was left unfreed so the Error member in it could be filled
  and remain available.  The change was was required because it's
  not always possible to free the struct afterwards. Case in point is
  a C# wrapper for giflib (or any language/environment where you can't
  just free objects allocated in a foreign shared library.)

* Minor fix for SF bug #56; BitsPerPixel may be left as uninitialized
  value when reading (truncated) gif.

* Applied SF patch #17: Use a fallback on Windows where mkstemp is not
  available.

* Applied SF patch #15: Code hardening, preventing spurious
  defective-image messages.

Retirements
-----------

* Removed gif2raw from utils. Its blithe assumption that the EGA16
  palette is a reliable default is now about 20 years obsolete. Format
  conversion is better done with convert(1) from the ImageMagick suite,
  anyway.

Version 5.0.6
=============

Minor fix for a rare memory leak (SF bug #55).  

MinGW port fixes.

Repair the internal quantization function used in gif2rgb so it's
less vulnerable to cross-platform skew due to qsort() being unstable.
This shouldn't affect production use, it's just a cross-platform
issue for regression testing 

Version 5.0.5
=============

Set the error return properly when a screen descriptor read fails.
Fixes for some minor API documentation bugs. Some internal manual
pages are not to be installed.

Version 5.0.4
=============

Fix for a rare misrendering bug when a GIF overruns the decompression-code 
table. The image on which this was spotted was a relatively long-running 
animated GIF; still images of ordinary size should have been immune.

Version 5.0.3
=============

Fix a build-system glitch so it will install manpages.

Version 5.0.2
=============

Documentation and polish
------------------------
* Partial build is now possible on systems without xmlto.

Code Fixes
----------
* Change unused return of EGifSetGifVersion() to void.
* Buffer overrun prevention in gifinto.

Version 5.0.1
=============

Documentation and polish
------------------------
* There is now an installable manual page for the GIFLIB utility kit.

Retirements
-----------
* gifinter is gone.  Use "convert -interlace line" from the ImageMagick suite.

Code Fixes
----------
* In 5.0.0 the private gif89 bit wasn't being guaranteed cleared at
  the beginning of EGifGetGifVersion(); this occasionally led to an
  incorrect version prefix being issued dependent on the state of
  malloced memory.
* An EGifSetGifVersion() function taking a GifFile argument has been 
  added for use with the low-level sequential API. This change requires
  a bump of the library revision number.

Version 5.0.0
=============

Changes to the API require a library major-version bump. Certain
initialization functions have acquired an integer address argument for
passing back an error code, in order to avoid thread-unsafe static
storage. Application code using extension blocks will require minor
changes. A few functions have been renamed.

Code Fixes
----------
* Fixes applied for CVE-2005-2974 and CVE-2005-3350
  This closes Debian bug #337972.

New API Features
----------------

Thread Safety
~~~~~~~~~~~~~
The library is now completely re-entrant and thread-safe.

* Library error handling no longer uses a static cell to store the last
  error code registered; that made the library thread-unsafe.  For functions 
  other than GIF file openers, the code is now put in an Error member of
  the GifFileType structure.  The GifError() and GifLastError() functions
  that referenced that static cell are gone, and the GifErrorString()
  function introduced in the 4.2 release now takes an explicit error code
  argument.
* GIF file openers - DGifOpenFileName(), DGifOpenFileHandle(), DGifOpen(),
  EGifOpenFileName(), EGifOpenFileHandle(), and EGifOpen() - all now take
  a final integer address argument.  If non-null, this is used to pass
  back an error code when the function returns NULL. 

Extensions
~~~~~~~~~~
The ExtensionBlock API has been repaired, solving some problems with GIF89
extension handling in earlier versions.

* DGifSlurp() and EGifSpew() now preserve trailing extension blocks with
  no following image file.
* Three documented functions - EGifPutExtensionFirst(), EGifPutExtensionNext(),
  and EGifPutExtensionLast() - have been relaced by new functions
  EGifPutExtensionLeader(), EGifPutExtensionBlock(), and 
  EGifPutExtensionTrailer().  See the Compatibility section of
  the library API documentation for details.
* New functions DGifSavedExtensionToGCB() and EGifGCBToSavedExtension()
  make it easy to read and edit GIF89 graphics control blocks in saved images.

Namespacing
~~~~~~~~~~~
All functions exported by giflib now have DGif, EGif, or Gif as a name prefix.

* Three documented functions - MakeMapObject(), FreeMapObject(), and
  UnionColorMap() - have been renamed to GifMakeMapObject(),
  GifFreeMapObject(), and GifUnionColorMap() respectively.
* The library Draw* functions are now prefixed GifDraw*, and the
  text-drawing ones are suffixed with "8x8". This fixes a conflict
  with the Windows API and leaves the door open for more general text-drawing
  functions with different font sizes.

Other changes
~~~~~~~~~~~~~
* DGifSlurp() and EGifSpew() now read and write interlaced images properly.
* The amazingly obscure colormap sort flag and pixel aspect ratio
  features of GIF are now read and preserved, for whatever good that
  may do.
* Six undocumented functions have been renamed; five of these take additional
  or slightly different argument types. See the Compatibility section of
  the library API documentation for details.
* There's now an EGifGetGifVersion() that computes the version EGifSpew() 
  will write.
* QuantizeBuffer() has been returned to the core library as GifQuantizeBuffer() 
  - turns out some important applications (notably mplayer) were using it.
* TRUE and FALSE macros are gone, also VoidPtr.  No more namespace pollution.
* Various arguments have been made const where possible.

Retirements
-----------
* The (undocumented) gifinfo utility is gone.  Use giftool -f instead.
* The gifburst utility is gone.  Everybody has image viewers that
  can pan now, and removing it gets rid of a dependency on Perl.
* gifcompose is gone.  It was a decent idea when I wrote it in 1989,
  but I did the same thing better and cleaner a decade later with
  PILdriver in the PIL package. Removing it gets rid of a dependency
  on shell.
* gif2x11 gifasm, gifcomb, gifflip, gifovly, gifpos, gifresize, and gifrotate
  are all gone.  The ImageMagick display(1)/convert(1) utilities and PILdriver
  do these things better and in a format-independent way.
* Lennie Araki's Windows C++ wrapper is gone. It's eight years old,
  unmaintained, he has dropped out of sight, and a better one needs to
  be written to use the high-level GIFLIB API and GIF89 graphics
  control extension support.  We'll carry such a wrapper when we have
  a maintainer for it.
* EGifSetVersion(), introduced in 4.2, is gone. The library always
  writes GIF87 or GIF89 as required by the data. This change helps
  with thread safety.

Utilities
---------
* Several utilities have been renamed to (a) fix last-century's habit
  of arbitarily smashing vowels out of names to make them just one or two
  characters shorter, (b) ensure that every utility in this set has 'gif'
  as a name prefix. Here's the list:

	giffiltr -> giffilter
	gifspnge -> gifsponge
	icon2gif -> gifbuild
	text2gif -> gifecho
  	raw2gif  -> gif2raw

* To go with its new name, gif2raw now dumps raw pixels from a GIF if the
  (previously required) size option is missing.
* Standalone rgb2gif is gone; the same capability is now a mode of gif2rgb.
* giftext displays the parsed contents of GIF89 graphics control blocks.
* gifbuild handles GIF89 graphics control blocks and Netscape animation
  loop blocks; it can can display and update either.
* gifrotate and other filter utilities now preserve extension blocks, 
  including the graphics control information for transparency and delay time.
* A new utility, giftool, supports a wide variety of filtering operations
  on GIFs, including: setting background and transparency colors, changing
  interlacing, setting image delays, setting the user-input flag, and setting
  the aspect-ratio byte.  It can sequence multiple operations.
* The test-pattern generators gifbg, gifcolor, gihisto and gifwedge and the
  code templates giffilter and gifsponge are no longer installed by default.

Documentation and polish
------------------------
* The history.txt and build.txt and files from 4.2.0 now have .asc extensions
  to indicate that they use asciidoc markup, contrasting with the txt 
  standards files from CompuServe.
* The documentation now includes "What's In A GIF", a very detailed narrative
  description of the file format.
* The -A option of gifasm (for inserting a loop control block) is documented.
* The documentation directory includes a copy of the original GIF87 
  specification as well as GIF89's.
* The project now has a logo.

Version 4.2.0
=============

Now maintained by ESR again after handoff by Toshio Kuratomi.

Code Fixes
----------
* Code updated internally to C99 to enable more correctness checks by
  the compiler. Compiles under GCC 4.6.1 without errors or warnings.
* A rare resource leak in the colormap-object maker was found with
  Coverity and fixed.
* The code now audits clean under Coverity and cppcheck.
* splint cleanup begun, there's a lot of work still to do on this.

New API Features
----------------
* The default GIF version to write is now computed at write time from
  the types of an image's extension blocks, but can be overridden with 
  EGifSetGifVersion().
* EGifSpew() is now thread-safe. 
* Two new functions, GifError() and GifErrorString(),
  return the error state in a form that can be used by programs.
* Two library functions - EGifOpenFileName() and EGifPutImageDesc() -
  now have bool rather than int flag arguments. Since bool is a
  typedef of int and TRUE/FALSE have been redefined to true/false, 
  both source and object compatibility with older library versions
  should be preserved. 
* GAGetArgs(), used only in the utilities, now returns bool rather
  than int. 
* The undocumented GIF_LIB_VERSION symbol is gone from the library header.  
  It has been replaced with three documented symbols: GIFLIB_MAJOR,
  GIFLIB_MINOR, and GIFLIB_RELEASE.

Retirements
-----------
* The gif2epsn and gif2iris utilities are gone.  They were full of
  platform dependencies for platforms long dead.  There are enough
  platform-independent GIF viewers in the world that these weren't
  adding any value. Removing these gets rid of a dependency on GL.
* The rle2gif, gif2rle, and gif2ps utilities are also gone. There are enough
  multiformat image converters in the world that these weren't adding 
  any value either.  Removing them reduces the codebase's dependencies.
* The undocumented DumpScreen2Gif() is gone from the library.  The
  only non-obsolete capture mode it supported was through X, and that
  probably hasn't been used in years and is replaceable by any number
  of capture utilities.  Dropping this code makes the library's 
  portability issues go away.
* QuantizeBuffer(), GifQprintf(), PrintGifError(), GIF_ERROR() 
  and GIF_MESSAGE() have been removed from the core library.  
  They were used only by the utilities. QuantizeBuffer() has been
  inlined where it was used and the latter three are now part of the
  utility support library.
* The Game Boy Advanced test code is gone.  The platform was discontinued
  in 2008; more to the point, nobody ever documented the code's assumptions
  or expected results.
* The Changelog file is now retained for archival purposes only, and because
  autotools throws a hissy fit if there isn't one.  The single point of
  truth about changes and the reasons for them is the repository history.

Behavior changes
----------------
* The -q option of the utilities is replaced by an opposite -v (verbose)
  option; the default is now quiet for all platforms.  Defaulting to chattiness
  on MSDOS made sense in a world of slow text consoles, but not today.

Testing
-------
* There is now a proper regression-test suite; run 'make' in tests/.
  The old test-unx script is now tests/visual-check and can be run 
  occasionally for a check with the Mark One Eyeball.

Documentation
-------------
* Build instructions now live in build.txt
* An overview of the giflib API now lives in api.txt.
* Documentation is now in DocBook-XML, so either HTML or man pages can
  be generated from it.

Version 4.1.6
=============
Brown paper bag release.  Fix a problem with header inclusion that could
prevent the library from building on some platforms.

Version 4.1.5
=============
This version has some important fixes for segfaults when working with corrupt
files.  All users are strongly encouraged to upgrade.

Code Fixes
----------
* Fix segfault in utilities due to referencing ColorMaps in GifFiles that had
  no ColorMap present.
* Fix gif2x11 to work on 24 bit displays.
* Fix for giftext segfault when the GifFile does not store a global colormap.
* Checks to fail gracefully when an image contains improper LZ codes.
* Close file handles on failure in DGifOpenFileHandle()
* Checks to operate on files in binary mode on WIN32 as well as MSDOS.

Building
--------
* Add checks to make building on Win32 easier.
* Allow turning off gl_s, rle, and X11 support from the configure command line.
* Fix for finding a 32 bit integer type on some platforms.
* Only enable -Wall if we're using gcc.

Version 4.1.4
=============
This version fixes some bugs with deallocating ColorMaps.  Fix building on
several platforms.  Fix x86_64 builds to not hang the encoder.

* Fix several areas in decoding where we removed a ColorMap from our GifFile
  but didn't set the pointer to NULL.  This could lead to double free's of
  the ColorMap.
* Fix a bug in dev2gif.c where we redefined some gl types incorrectly.
* Fix a bug in the gif LZW encoder that was triggered on modern 64 bit
  platforms.
* Fix building on Windows.  Note -- there has been one API changing event for
  Windows (renaming DrawText to DrawGifText.)  This should have conflicted with
  Windows API and therefore caused the builds to fail previously.  If you had
  it working with DrawText before, apologies, you'll need to change to
  DrawGifText in your code.  This only affects Windows.
* Add support for building on The Game Boy Advance.  Note: Due to the GBA's
  limited memory, the API for the GBA uses short's in many places where the
  other platforms use ints.  This shouldn't affect anyone unless you've
  been able to get an older version of the code to run on GBA and want to
  start using this version instead.  A recompile of your dependent code
  will be necessary in this case.

Version 4.1.3
=============
This version fixes some bugs in the Extension writing code in
EGifPutExtensionFirst, Next, and Last.  Using these functions, it is possible
to output extensions that contain multiple subblocks.  Additionally, library
code has been updated to use these functions, making it safe to output
long Comments, and multi-block extensions read in from another file.

* giflib is now hosted on sourceforge with libungif:
  http://sourceforge.net/projects/libungif
* Make the EGifPutExtension{First,Next,Last} family of functions use WRITE
  so user defined WRITE methods will output them correctly.
* Modify EGifSpew and EGifPutComment to use EGifPutExtension{First,Next,Last}
  so we won't output broken GIFs when dealing with GIFs with multiple
  subblocks.
* More -Wall fixes revealed while testing on Solaris and FreeBSD.
* Updated the gif_lib.html documentation to not use EGifPutExtension when
  dealing with multiple subblocks.  Use EGifPutExtension{First,Next,Last}
  instead.
* Some Windows code from the old CVS repository now available in the windows
  subdirectory.  I don't have a Windows environment to test and maintain this
  but maybe someone out there will find it useful.  Caveat hacker.

Version 4.1.2
=============
* Numerous bug fixes from people on the old libungif mailing list.
* GIF_ERROR and GIF_MESSAGE are on the deprecation list as they are also
  utility helper functions rather than essential to the functioning of the
  library.
* Complete deprecation list is now in the README file
* Audited the sources with gcc -Wall. Everything detectable has now been fixed.
* Ran the library code through indent.
  
Version 4.1.1
=============
* Merge in many bug fixes that were sent in while I was hiking the
  Appalachian Trail.
* The qprintf methods of the library are now deprecated.  Do not use 
  GifQuietPrint or GifQprintf.  These should have been pushed out into the
  utility helper library instead of sitting around in the library proper at
  the same time as the getarg functions were moved out.  Getting rid of these
  will let us get rid of our dependence on stdarg.h/varargs.h (Which a Gif
  reading library has no business requiring.)

Version 4.1.0
=============
* Several minor memory leaks in error conditions have been plugged.
* New Function EGifOpen(void *userData, OutputFunc writeFunc) allows user
  specified gif writing functions.
* Old copyright notices in a few source files have been updated.  All library
  copyrights should now reflect the copyright notice in the COPYING file.

Version 4.0.0 -- giflib
=======================
This version of the giflib library merges Eric Raymond's giflib-3.0 release
with the libungif-4.0 release to give people a binary compatible choice
between the two libraries and gives me the chance to add bugfixes to giflib
that have been incorporated in libungif.

PLEASE READ THE FILE PATENT_PROBLEMS BEFORE USING THIS LIBRARY!

Version 4.0.0
=============
Major fixes have been made to the code that handles Extensions.
Unfortunately, this causes binary incompatibility with giflib-3.0 and
libungif-3.x.  However, the API is still intact.  I am, however, deprecating
the use of saveImage[x].Function.  Use
saveImage[x].ExtensionBlocks[y].Function instead.

Version 3.1.1
=============
 The following bugs which caused SegFaults have been fixed:
 * When reading gif files with extensions, DGifSlurp would violate memory.
 * When closing a gif that had a local colormap, DGifCloseFile would attempt
   to free the colormap twice.
 * Fix a potential memory leak in DGifSlurp.
 * New function DGifOpen to allow specifying a user definable gif reading
   function.

Version 3.1.0
=============
 * Add a new function:
        GifFileType *DGifOpen(void * userData, InputFunc readFunc)
   to read the gif image from a user defined input function.
 * A few bugfixes.

Version 3.0
===========

Changes from Eric Raymond's libgif
----------------------------------
* A new gif encoder that makes uncompressed gifs rather than standard,
  LZW-compressed gifs.  This is actually the major motivating factor behind
  libungif; to provide third-party distributors a means to provide a gif
  library without the patented LZW encoder.
* A new configure script to make compilation of the library on multiple
  platforms easier.  The package should now build shared libraries on all
  platforms supported by GNU libtool.
* Removed the getarg functions from libgif.  These were not part of the
  public API and only used by the tools in the utils directory so I separated
  them from the rest of the library.
* Fixed a few bugs in the tools in the utils directory.

Version 3.0
===========

New features
------------
* Incorporated Sirtaj Kang's changes to make both static and shared libs.
* All the utility and library docs are HTML now.
* The library and relevant utilities are now fully GIF89-aware.
* Functions for drawing text and boxes on saved images are documented.
* The distribution is now issued under a simple X-Consortium-style license.
* Can now generate package RPMs and LSM automatically.
* Home page with Web-acessible documentation at http://www.ccil.org/~esr/giflib

Bug fixes
---------
* Fix giftext to not core dump on a null extension record.
* Incorporate Philip VanBaren's change to prevent a core dump in gifasm.

Version 2.3
===========
* Fixed a core-dump bug in gifcomb revealed by ELF environment in Linux 1.2.13.

Version 2.2b
============
* Added gifburst tool.

Version 2.2
===========
* Linux is supported.

Version 2.1
===========
* Added the gifovly tool, which supports making a composite from several GIF
  images.
* Used gifovly to implement a full-fledged pasteup program in shell.  It's
  called gifcompose and lives in the util directory.
* Added a copy of the GIF89 standard to the doc directory (gif89.txt);
  also a description of the preferred compression method (lzgif.txt).

Version 2.0
===========
   With this version, development was taken over from Gershon Elber by Eric
S. Raymond <esr@snark.thyrsus.com>.  Note that I, esr, have pretty much
adhered to Gershon's coding style, even though it's quite baroque and DOS-
headed by my standards.

Library Improvements
--------------------
* New DGifSlurp() and EGifSpew() library entry points allow all GIF-bashing
  to be done in core on machines with sufficient memory.  Writing code to
  slice'n'dice multiple GIFs in non-sequential ways is now much easier (send
  kudos and brickbats to esr, small unmarked bills preferred).
* The interface has changed somewhat.  Members in the GifFileType structure
  have been renamed and regrouped.  This was required for support of the
  SavedImages member (which enables the new functions mentioned in 1).  Also,
  there is a new data type for allocated color maps and routines to handle
  it conveniently.
* Some minor bugs have been fixed.  Most notably, the DGif code now correctly
  handles the possibility of more than one code block per extension record,
  as per the GIF spec.  It's not clear, however, that anyone ever has or
  ever will use this feature for anything...

New Tools and Options
---------------------
* A brand new, ultra-spiffy tool `icon2gif' is included.  It assembles named
  GIFs with editable text color map & icon raster representations to produce
  multi-image GIFs usable as graphical resource files.  It can also dump most
  GIFs in the same text-only form it parses.  This makes it easy to edit GIFs
  even if you don't have a graphics editor.
* The gifclip utility supports a new `-c' (complement) option that allows you
  to perform an `inverse clip', removing horizontal or vertical bands from an
  image.
* The gifclrmp utility supports a new `-t' switch for shuffling color index
   values.
* A new tool `gifcolor' generates test pattern from colormap input.

New Documentation and Examples
------------------------------
* The documentation has been overhauled completely and translated out of the
  dialect spoken by the estimable Mr. Elber into something like standard
  English :-).
* Two source code files gifspnge.c and giffiltr.c have been added to the
  util directory.  These are GIF copiers that exercise the I/O routines,
  provided as skeletons for your applications.  Read the comments in them
  for more info.
* The util Makefile for UNIX has been improved.  It now uses the cc/gcc -s
  option rather than strip(1).  There are now separate install productions,
  so you can test new versions in util before installation for production
  (the top-level make script still does an install).

Version 1.2
===========
* GIFFIX - a new tool to attempt and fix broken GIF images. Currently fix
  images that has EOF prematurely by padding with the darkest color.
* Make GIF2BGI display as much as it can considering the mem. avail.
* Add -q flag to all tools for quite running scan line number mode.
* Fix a (minor!?) bug in the GIF decoder when encountering code 4095.
* New tools (RGB2GIF and GIF2RGB) to convert GIF to/from 24 bits RGB images.
* New tool GIFROTAT to rotate a gif image by an arbitrary angle.
* GifRSize was updated to resize by an arbitrary factor.

Version 1.1
===========
* GIF2BGI - a new utility to display GIF images using Borland's BGI drivers
  (if you have one...)
* TEXT2GIF - Converts plain text into GIF images.
* GIF2IRIS - SGI4D display program for GIF images.
* GIF_LIB naming convension has been modified to make sure it has unique
  names (see gif_lib.h).
* Support for SGI4D gl and X11 window grabbing has been added to the
  library. SGI4D input is quantizied into 8 bits.
  Also support for EGA/VGA devices has been added as well.
  see Dev2gif.c module.
* Support for the new gif89a format has been added.



