GraphicsMagick ChangeLog
2026-01-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
PerlMagick/Makefile.am (clean-perl): 'make clean' now removes any symbolic links in the PerlMagick directory which point back to the GraphicsMagick source tree.
magick/color_lookup.c (GetColorList): Add missing break statement. Should resolve Coverity 501366 "Resource leak".
magick/color_lookup.h: Move definition of ColorInfo into color_lookup.c. Move declarations of GetColorInfo() and GetColorInfoArray() into color_lookup.c.
magick/color_lookup.c (GetColorInfo): Optimize to minimize up-front penalties rather than for repeated look-ups for the same color name. No longer re-order linked list based on most recently accessed entry. Remove locking which is no longer necessary in other functions. Block out compilation of GetColorInfoArray() since it was only declared privately, and was never used.
2026-01-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
magick/pixel_cache.c (OpenCache): After acquiring the images resource, release the images resource if the cache otherwise fails to successfully open.
magick/pixel_cache.c: Include the cache_info address as a useful identifier in CacheEvent log messages.
coders/png.c: Attempt to release memory after error due to hitting ImagesResource limit. Addresses oss-fuzz 478558487 "graphicsmagick:coder_MNG_fuzzer: Direct-leak in MagickMalloc".
2026-01-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
fuzzing/oss-fuzz-build.sh (BUILD): Use -rj when creating MIFF corpus since now there are no conflicting names.
PerlMagick/t/zlib/{read.t, write.t, input_zlib.miff:
input_zlib.miff.gz]: Rename files so that they are non-conflicting for oss-fuzz corpus.
coders/heif.c (RegisterHEIFImage): Re-add a module registration for HEIC, which got lost during prior edits.
fuzzing/oss-fuzz-build.sh: Shell syntax clean-up. (BUILD): Create seed_corpus files.
2026-01-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
fuzzing/oss-fuzz-build.sh: Tidy the GraphicsMagick part of the build. Install GraphicsMagick config files under /out so that they will be discovered, and possibly loaded.
fuzzing/utils.cc (LLVMFuzzerInitialize): Provide an alternate build mode which uses LLVMFuzzerInitialize() to pass an argument to InitializeMagick() for dynamic initialization. Default initialization is still based on as static class instantiation.
fuzzing/coder_list.cc (main): Support passing an argument to InitializeMagick().
2026-01-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
fuzzing/oss-fuzz-build.sh (BUILD): Add -Wno-error=shorten-64-to-32 to vvenc i386 build options to avoid build failure.
2026-01-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
fuzzing/oss-fuzz-build.sh: Add checks to verify that source directory does exist before trying to compile it. Disable building libtiff temporarily due to a compilation issue.
2026-01-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
www/INSTALL-windows.rst: Record that libtiff is updated to libtiff 4.7.1.
Magick++/lib/Thread.cpp (Magick::MutexLock::unlock): Fix Magick::MutexLock::unlock cerr compilation.
2026-01-21 Matt Gilarde <mattg@progress.com>
Update libtiff from 4.5.1 to 4.7.1.
2026-01-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
fuzzing/oss-fuzz-build.sh: Re-written to eliminate pushd/popd, avoid environment variable pollution, build everything outside of the source trees, and added support for building openh264, vvdec, vvenc, x264 (with support by libheif), once the oss-fuzz Dockerfile is updated to provide them.
configure.ac: Remove unwanted space.
2026-01-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
magick/pixel_cache.c, magick/resource.c, magick/resource.h: Add support for ImagesResource limit, and -limit images for the command line. This is a limit on the number of discrete images loaded into the program simultaneously.
coders/heif.c: If we have libheif/heif_sequences.h, then use it.
2026-01-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
Magick++/lib/Thread.cpp (Magick::MutexLock::unlock): Do not throw C++ exception since this method is used by the destructor and C++ exceptions should not be thrown from destructors. Another case of Coverity 501168 "Uncaught exception".
coders/heif.c (ReadHEIFImageFrame): Fix opacity code for monochrome HEIF image. Use union for plane pointer access.
2026-01-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
coders/heif.c: Add preliminary support for a "MP4" coder.
configure.ac: Add a check for libheif/heif_sequences.h.
2026-01-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
magick/blob.c: Restore use of externally allocated stdio vbuf. It appears that some versions of GNU libc (e.g. 2.31) may attempt to access bytes in a self-allocated vbuf which were not initialized. Should close oss-fuzz issues 475333713, 475305110, and 475335803.
2026-01-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
PerlMagick/t/heif: Add some sample images for AVCI, AVIF, and HEIC.
coders/heif.c (ReadHEIFImageFrame): Throw exception rather than abort if heif_image_get_plane_readonly2() returns NULL. (RegisterHEIFImage): Add coder registrations for "AVCI" and "AVIF".
2026-01-10 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
Magick++/lib/Thread.cpp (Magick::MutexLock::~MutexLock): Fix Coverity "CID 501168: Error handling issues (UNCAUGHT_EXCEPT)". C++ destructors should not throw exceptions.
PerlMagick/Magick.xs: Fixes so PerlMagick can build with C++.
coders/heif.c (ReadHEIFImage): Log the 'magick' string assignment.
magick/magick.c (MagickToMime): Add more MIME mappings.
coders/heif.c (IsHEIF): Use heif_check_filetype() to verify that the input appears to be HEIF.
2026-01-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
coders/heif.c (ReadHEIFImage): Support accessing file data directly from in-memory blob. Add a simple header sanity check.
magick/blob.c (OpenBlob): Have setvbuf() allocate the buffer rather than managing it independently.
coders/heif.c (ReadHEIFImage): Support reading multiple image frames. Deduce image magick string by asking libheif what it is.
2026-01-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
Magick++/lib/Image.cpp (Magick::Image::monochrome): If monochrome is disabled, then clear the image is_monochrome flag if it is set. This may help for issues such as SourceForge issue #397 "DIB: Unable to write a monochrome DIB as 8bit depth.".
coders/dib.c (WriteDIBImage): Add tracing to reveal the image storage representation.
NEWS.txt: Update the news.
Magick++/lib/Magick++/Thread.h, Magick++/lib/Thread.cpp: Change definition used to enable pthreads support from HasPTHREADS to HAVE_PTHREAD. Magick++ code relying on this has not been thread-safe since 2003! Much thanks to Michael Stephan for making me aware of this.
coders/wbmp.c (RegisterWBMPImage): Support "WBM" and "WBP" as extensions for WBMP format. Resolves SourceForge issue #192 "can not open *.wbm".
2026-01-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
coders/jpeg.c (ReadJPEGImage): While in ping mode, set is_grayscale true for JCS_GRAYSCALE images, and otherwise set is_grayscale and is_monochrome to false. This should help GetImageCharacteristics() report something useful while in ping mode. Resolves SourceForge issue "#614 ping(blob) reports JPG and JNX files as monochrome BilevelType".
2026-01-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
coders/jp2.c (WriteJP2Image): Specifying '-define jp2:rate=1.0' is documented to use lossless compression (by removing the rate specification entirely), but this was not working properly. Fixed now.
2026-01-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
Copyright.txt: Updated copyright year. Rotated ChangeLog to ChangeLog.2025.
2026-01-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>
wand/drawing_wand.c: The existing function bodies are gutted and replaced with calls into the equivalent functions in magick/draw.c. This eliminates a large amount of replicated code.
magick/draw.c (DrawCloneContext): New function to replicate (deep copy) an existing drawing context.