GraphicsMagick

- Home
- Project
- Download
- Install
- Source
- News
- Utilities
- Programming
- Reference

# GraphicsMagick ChangeLog

2026-07-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - version.sh: Updates in preparation for the 1.3.48 release

> - NEWS.txt: Update the news.

> - coders/svg.c (SVGValidateElementId): Try to eliminate warning regarding indexing an array using a 'char' reported by Cygwin GCC 14.4.0.

> - coders/heif.c (GetHEIFDecoders): Only include GetHEIFDecoders function if HEIF is supported.

2026-07-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/png.c (png_read_raw_profile): Add more tracing regarding raw profiles.

2026-07-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/viff.c (WriteVIFFImage): Narrow the scope of the 'viff_pixels' allocation handling added yesterday. Use MagickAllocateResourceLimitedArray() where possible. Re-flow the source code to match the indentation used by the rest of the project. (ReadVIFFImage): Fixes so the Khoros VIFF sample files from the Encyclopedia Of Graphics File Formats which are based on integer data storage types read correctly. The files 'HEAD.XV' and 'LABLABEL.XV' still do not read correctly since they use single and double data storage types, respectively.

2026-07-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/viff.c (WriteVIFFImage): Assure that 'viff_pixels' allocation is not leaked in error case. This corresponds to ImageMagick CVE-2026-61870.

2026-07-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/blob.c (ImageToBlob): Fix memory leak which may occur if WriteImage() fails. Addresses oss-fuzz issue 529154719 "graphicsmagick:coder_WMF_fuzzer: Direct-leak in MagickMalloc".

> - magick/common.h (MAGICK_MEMBER_DEPRECATED): Add MAGICK_MEMBER_DEPRECATED to mark deprecated structure members.

2026-07-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - configure.ac: Fixes so zlib and lcms2 may still be detected if pkg-config is not available. Addresses SourceForge issue #773 "Missing -lz when using alternative to pkg-config for libz". Fixes so Freetype may be detected if pkg-config.is not available.

2026-07-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - coders/png.c (WriteOneJNGImage): Use GetImageCharacteristics().

> - coders/png.c (WritePNGImage): Eliminate a disparity caused by the difference between GetImageCharacteristics() results and IsMonochromeImage(), IsGrayImage() results by only using values from GetImageCharacteristics(). This might also improve performance. Addresses "[security] GraphicsMagick MNG re-encode: heap-buffer-overflow WRITE in ExportGrayAlphaQuantumType reached from gm convert (magick/export.c:1105)" as reported by David Korczynski via email on May 28, 2026. Credit to Anthropic Claude and Ada Logics.

2026-07-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - www/INSTALL-unix.rst: Document the packages required for a Microsoft Windows 64-bit w64-ucrt x86_64 build.

2026-07-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - coders/dcm.c (DCM_RLE_ReadByte): If frag_bytes is already 0, then return 0 and a corrupt image exception. Addresses "vuln-2-dcm-rle-fragment-oob-read.txt" reported by Tristan Madani via email on June, 27 2026. (funcDCM_NumberOfFrames): Use MagickAtoUIChk() rather than MagickAtoI() in order to check for error, and to produce an unsigned value. Addresses "vuln-3-dcm-negative-frames-dos.txt" reported by Tristan Madani via email on June, 27 2026.

> - coders/msl.c (MSLWarning, MSLError): Use LogMagickEventList() rather than LogMagickEvent() to log va_list. Addresses "vuln-4-svg-msl-valist-ub.txt" reported by Tristan Madani via email on June, 27 2026.

> - coders/svg.c (SVGWarning, SVGError): Use LogMagickEventList() rather than LogMagickEvent() to log va_list. Addresses "vuln-4-svg-msl-valist-ub.txt" reported by Tristan Madani via email on June, 27 2026.

> - coders/tiff.c (CheckAndStoreStr): If EXIF profile string is not already NUL terminated, assure that it is NUL terminated before passing it to libtiff. Addresses "vuln-1-exif-unterminated-string-oob-read.txt" as reported by Tristan Madani via email on June, 27 2026. (AddIFDExifFields): Address possible out of bounds read (2 bytes) beyond the end of the allocated profile buffer. Addresses "vuln-5-exif-ifd-offby2-oob-read.txt" as reported by Tristan Madani via email on June, 27 2026.

2026-07-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/attribute.c (GenerateIPTCAttribute): Prevent reading past the end of a truncated/short IPTC profile. While the issue is limited to reading, the program could crash if it attempts to access outside of the process address space. Issue was reported via email by Bin Luo on July 1, 2026 and the proposed patch is part of this fix.

> - coders/meta.c (GetIPTCStream): Prevent reading past the end of a truncated/short IPTC profile. While the issue is limited to reading, the program could crash if it attempts to access outside of the process address space. Issue was reported via email by Bin Luo on July 1, 2026.

2026-06-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - utilities/tests/gen-tiff-images/genimages (GM): If the 'GM' environment variable is set, it is used as the path to the GraphicsMagick binary to use, otherwise 'gm' is invoked.

2026-06-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/command.c (BenchmarkImageCommand): omp_set_nested() was deprecated by OpenMP 5.0. Use omp_set_max_active_levels(2) for OpenMP 3.0 and later. (VersionCommand): Update the table of OpenMP versions.

2026-06-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - magick/gradient.c (GradientImage): Fix 'pixel_packets' and 'indexes' addressing logic for NorthGravity. Addresses "[security] GraphicsMagick GradientImage: heap-buffer-overflow READ in NorthGravity branch reached from gm convert (magick/gradient.c:284)" from David Korczynski. Credit to Anthropic Claude and Ada Logics.

> - coders/tiff.c (AddIFDExifFields): Add many more validations and safeguards to EXIF in TIFF writer. Addresses "[security] GraphicsMagick TIFF writer: heap-buffer-overflow WRITE in AddIFDExifFields via 32-bit count*2 wrap on EXIF SHORT array (coders/tiff.c)" from David Korczynski. Credit to Anthropic Claude and Ada Logics.

> - coders/pcd.c (ReadPCDImage): Over-provision the per-channel Huffman decode buffers and detect any attempt to overflow them. Fixes are inspired by fixes in ImageMagick, but retaining the original planar design. Discovered and reported by Cipher - Causal Security (https://causalsecurity.com/) via email on June 14, 2026.

2026-06-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - configure.ac: Eliminte redundant report regarding libzip in configuration summary.

2026-06-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/display.c (MagickXTileImage): Correct bounds checking for 'filename' length. Thanks to Petr Gajdos for a heads-up regarding the disparity.

2026-05-31 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/pcx.c (WritePCXImage): If image has more than 256 colors, save as a DirectClass type. Addresses "[security] GraphicsMagick PCX writer: heap-buffer-overflow WRITE in WritePCXImage colormap fill (coders/pcx.c:1186)" from David Korczynski. Credit to Anthropic Claude and Ada Logics.

> - coders/locale.c (ReadConfigureFile): Bound the length passed to strncpy() and string terminator. Addresses "[security] GraphicsMagick LOCALE coder: stack-buffer-overflow WRITE in ReadConfigureFile reached from gm convert (coders/locale.c:257)" from David Korczynski. Credit to Anthropic Claude and Ada Logics.

2026-05-30 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/miff.c (ReadMIFFImage): Correct scope of 'values' reallocation error handling. Addresses "[security] GraphicsMagick MIFF reader: heap-use-after-free WRITE via stale cursor on values-buffer realloc failure (coders/miff.c:1048)" from David Korczynski. Credit to Anthropic Claude and Ada Logics.

2026-05-29 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/pict.c (DecodeImage): Do not attempt to intuit byteCount must be a word because the approach used does not work. Fixes SourceForge issue #772 "pict file fails with gm 1.3.47".

2026-05-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/coder_list.cc: Exclude "BIE" since it is the same as "JBIG".

2026-05-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - www/miff.rst: Document that each montage image directory name is limited to 2052 characters.

> - magick/display.c (MagickXTileImage): Address ImageMagick CVE CVE-2026-42050, ImageMagick security advisory GHSA-7mxf-ff4f-jj7p "A malicious MIFF file could trigger an overflow when a user opens it in the display tool and right-clicks a tile to invoke the Load / Update menu item.". The problem is that the 'filename' buffer on the stack could overflow if the associated file data is too long. While this is definitely a bug it does not appear to be CVE-worthy. Much thanks to Petr Gajdos for bringing this to my attention.

2026-05-13 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - GraphicsMagick 1.3.47 was released!

> - NEWS.txt: Update the news.

> - wand/wand_symbols.h: Update GraphicsMagick Wand library symbol remapping. Only the Copyright banner date is changed.

> - magick/symbols.h: Update GraphicsMagick main library symbol remapping. GetColorInfoArray() and GetColorInfo() are removed from the mapping given that they are implementation functions now declared as static. New functions added to remapping are DrawClearException(), DrawCloneContext(), DrawGetException(), and DrawNewContext().

2026-05-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/tiff.c (ReadTIFFImage): Only use TIFFOpenOptionsSetMaxCumulatedMemAlloc() if it is available.

> - configure.ac: Check for TIFFOpenOptionsSetMaxCumulatedMemAlloc() in libtiff, which was added in v4.7.0.

> - coders/heif.c (ReadHEIFImage): If OpenMP is available, then the default for libheif tile decoding threads is the same as the number of OpenMP threads, otherwise it is 4.

2026-05-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (ReadHEIFImage): Add support for -define heif:tile-threads=number to specify how many tiles may be decoded at once, with one thread per tile.

2026-05-10 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/render.c (DrawImage): Add more discrete error checking and tracing to stop on error immediately, and to help understand the point where the error occurred.

2026-05-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/svg.c (ReadSVGImage): Add more validations for invalid attribute values which contain single quotes so they are not passed into the MVG. Add more comments and tracing.

2026-05-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/svg.c (ReadSVGImage): Add validations for element id syntax. Reject invalid attribute values which contain single quotes so they are not passed into the MVG. Much thanks to Guanni Qu for the heads-up about this problem.

2026-05-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/svg.c: Use sizeof() to evaluate and pass size of stack-allocated destination buffer rather than hard-coded MaxTextExtent.

> - doc/options.imdoc: Document -define heif:interleaved-rgb-decode={true|false}.

2026-05-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh (BUILD): Pass --libdir=lib to meson so that its library is installed to the expected directory. This issue was causing libheif not to be included in the build, as well as many bogus oss-fuzz reports about libheif issues being fixed.

2026-05-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - magick/describe.c (DescribeImage): Avoid a heap write overflow while parsing the image directory. This is a very old bug! Bug report and proposed solution by '007bsd'.

2026-05-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh (BUILD): Include dav1d in the oss-fuzz build.

2026-05-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/jpeg.c (ReadJPEGImage): For a depth of 12 or 16, components 1, and storage_class PseudoClass, assign pixel indexes directly without any scaling.

2026-05-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/dpx.c (WriteDPXImage): Report an error if either sampling factor case fails, not only if both sampling factor cases fails. Addresses SourceForge issue #771 "Division by zero in WriteDPXImage due to incorrect AND/OR in sampling factor".

> - coders/xcf.c (ReadXCFImage): Report an error if there are no layers. (ReadOneLayer): Constrain outLayer->opacity to 255. Addresses SourceForge issue #770 "XCF coder: two unsigned integer overflows from missing input validation".

> - coders/dcm.c (DCM_RLE_ReadShort): Fix bit shift for 16-bit short. Addresses SourceForge issue #769 "Incorrect bit shift in DCM_RLE_ReadShort() corrupts 16-bit DICOM RLE data".

2026-04-29 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/README.txt: Add some notes for building PROJ and libgeotiff, which may eventually be used by libheif.

> - coders/heif.c (ReadHEIFImage): Fully trace libheif heif_error code, subcode, and message.

2026-04-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh: Use -DLIBDEFLATE_BUILD_SHARED_LIB=OFF to disable building libdeflate shared library.

2026-04-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh: Include Lerc and libdeflate in libtiff oss-fuzz build.

2026-04-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/tiff.c: Add support for LERC compression. Update Magick++, PerlMagick, and TclMagick to be able to access it.

2026-04-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - configure.ac (PSDelegateDefault): Change native_win32_build PSDelegateDefault to 'gswin64c.exe'

2026-04-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c: Compilation fixes for older libheif.

2026-04-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/ps.c (ReadPSImage): Fix Coverity 503217 "RESOURCE_LEAK" regarding 'file' not being closed. This issue is in new code.

> - magick/fx.c (MorphImages): Fix new compilation warning regarding 'status'.

> - magick/command.c (MogrifyImage): Fix new compilation warning regarding 'status'.

> - coders/ps.c (WritePSImage): Enforce that width and height dimensions, and total pixels, passed to Ghostscript are within the same limits as specified for GraphicsMagick.

> - coders/ps3.c (WritePS3Image): Enforce that width and height dimensions, and total pixels, passed to Ghostscript are within the same limits as specified for GraphicsMagick.

> - coders/ps2.c (WritePS2Image): Enforce that width and height dimensions, and total pixels, passed to Ghostscript are within the same limits as specified for GraphicsMagick.

> - coders/ps.c (ReadPSImage): Enforce that width and height dimensions, and total pixels, obtained from Ghostscript are within the same limits as specified for GraphicsMagick.

2026-04-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - (SetImageType): Assure that callers of SetImageType() do check and report errors reported by it.

2026-04-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/image.c (SetImageType): Return status is now contingent on the success of the operations performed. (AppendImages): Return status is now contingent on the success of the operations performed. (ClipPathImage): Return status is now contingent on the success of the operations performed. (CompositePathImage): Return status is now contingent on the success of the operations performed.

> - magick/render.c (DrawImage): Assure that 'keyword' is initialized. Add a trace prior to early return.

2026-04-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh: Add more HEIF samples to oss-fuzz corpus.

> - PerlMagick/t/heif/: Add more HEIF samples.

> - www/index.rst: Fix broken oss-fuzz open bugs link.

2026-04-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (RegisterHEIFImage): Provide codec descriptions when registering HEIF subformats.

2026-04-14 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (ReadHEIFImageFrame): Support both RGB interleaved and planar decode modes at once. Use the heif:interleaved-rgb-decode=yes/no define to select which mode is used. Influences how libheif presents the decoded image to GraphicsMagick, but the final result is the same.

2026-04-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - coders/jpeg.c (WriteJPEGImage): Allow writing CMYK JPEG without specifically requesting it. Both RGB and CMYK should be allowed. Addresses SourceForge issue #768 "CMYK JPEG written out as RGB". This bug was added by Mercurial changeset 67af31d0d1a2 on October 28, 2025.

> - coders/pcd.c (DecodeImage): Correct loop initialization to prevent out of bounds read. Similar to ImageMagick commit 5204a16 which addresses ImageMagick security advisory GHSA-wrhr-rf8j-r842. Much thanks to Petr Gajdos for bringing this to my attention.

> - coders/heif.c (ReadHEIFImageFrame): MaxValueGivenBits() returns 0 on error, such as when the input value is negative. Throw an exception in this case. Addresses Coverity issue 503157 "DIVIDE_BY_ZERO".

2026-04-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (ReadHEIFImageFrame): Add code to read interleaved format. Depths greater than 8 are not working correctly yet. (ReadHEIFImageFrame): Interleaved reading is fixed now. Enable it by default for extensive testing. However, interleaved is not faster than planar.

2026-04-07 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (ReadHEIFImageFrame): Use planar mode for RGB(A) until interleaved mode is implemented.

> - coders/mat.c (ReadMATImage): Make sure that 'image2' gets freed. Addresses oss-fuzz 480506472 "graphicsmagick:coder_MAT_fuzzer: Indirect-leak in ___interceptor_malloc".

2026-04-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (ReadHEIFImageFrame): Scale each channel based on the value reported by heif_image_get_bits_per_pixel_range() for the channel. Support channel_bits_per_pixel_range() values up to 32 in case libheif produces such values. (ReadHEIFImageFrame): Separate getting the sample from scaling the sample.

2026-04-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/render.c (DrawImage): All function returns past "begin draw-image" pass through "end draw-image" for assured resource clean-up. Intended to address oss-fuzz 499125828 "graphicsmagick:coder_SVG_fuzzer: Direct-leak in _MagickReallocateResourceLimitedMemoryLoc".

2026-04-03 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/ps3.c (WritePS3Image): Check that Postscript dimensions are within resource limits. Only enable for oss-fuzz at the moment.

> - coders/ps2.c (WritePS2Image): Check that Postscript dimensions are within resource limits. Only enable for oss-fuzz at the moment.

> - coders/ps.c (ReadPSImage): Check that Postscript dimensions are within resource limits. Only enable for oss-fuzz at the moment. (WritePSImage): Check that Postscript dimensions are within resource limits. Only enable for oss-fuzz at the moment.

> - fuzzing/utils.cc (LLVMFuzzerInitialize): Allow overriding the logging event mask using the MAGICK_DEBUG environment variable.

> - magick/magick.c (InitializeMagickEx): Add more details in comments.

> - magick/render.c (DrawImage): Code formatting fix.

2026-04-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/display.c (MagickXImageWindowCommand): Assure that the 'delta' buffer will not overflow if the user keeps a numeric key depressed. Reset the buffer and transformed results if more than 10 digits have been collected, or the value fails to convert to an integer. Addresses SourceForge issue "#766 CVE-2026-33535".

> - fuzzing/oss-fuzz-build.sh (BUILD): Explicitly pass CXXFLAGS from build script to GraphicsMagick configure.

> - fuzzing/README.txt: Add some notes about debugging issues.

2026-03-31 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/utils.cc (LLVMFuzzerInitialize): Remove the MagickFuzzerConfirmAccess code which was added yesterday.

> - fuzzing/oss-fuzz-build.sh: Add a tiny TTF corpus.

2026-03-30 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/utils.cc (MagickFuzzerConfirmAccess): Deny access to some security-sensitive files.

> - Magick++/demo/zoom.cpp (ConfirmAccess): Add a sample access confirmation handler.

> - Magick++/lib/Magick++/Include.h: Add access confirmation functions and enumerations to Magick++ namespace.

> - magick/error.c (ThrowException): Remove the set of exception->signature to zero. This long-standing bug was not noticed since implementation code uses ThrowLoggedException().

2026-03-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/annotate.c (RenderFreetype): Add more validations for draw_info->font. Use MagickConfirmAccess() to verify that font file name is allowed to be read.

2026-03-26 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh: Build Freetype after JXL. Use JXL build for Brotli dependency. Enable similar FreeType configure options as Freetype's own oss-fuzz build uses now.

> - magick/annotate.c (RenderFreetype): Assure that pointer variables which should be initialized upon success by FreeType functions are initialized with a null pointer. Verify that pointer is no longer null before using it. Trust but verify.

2026-03-20 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/resource.c (resource_info): Minimum limit for 'files' limit must be 0.

2026-03-19 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/png.c (WriteOneJNGImage): Properly handle and report the case where ImageToBlob() returns NULL. (WriteMNGImage): MNG only supports a color palette up to 256 colors. Addresses SourceForge issue #764 "CVE-2026-28690". Replace most ImageMagick-compatibility macro names with native names.

2026-03-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/png.c (png_write_raw_profile): Detect and report an excessively large profile, and other unexpected conditions. Addresses SourceForge issue #765 "CVE-2026-30883".

2026-03-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/utility.c (FormatString): Deprecate FormatString(), and replace all usages with MagickFormatString(), or a suitable equivalent. When ImageMagick was created, the minimum text buffer size was declared by MaxTextExtent, which assumed suitable for any purpose. FormatString() limits the amount of data written to MaxTextExtent-1. Almost all former FormatString() sites now pass the actual buffer size rather than using MaxTextExtent. This was a lot of code edits!

2026-03-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - coders/yuv.c (ReadYUVImage, WriteYUVImage): Address GraphicsMagick bug #763 "CVE-2026-25799". This fixes a '-sampling-factor' / 'ImageInfo->sampling_factor' argument validation issue inherited from the ImageMagick code base. The symptom is a divide by zero exception. Given that this issue arises from an external user argument, rather than from an input file, this seems like a bug, but not very CVE-worthy.

2026-02-27 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (HEIF_colorspace_to_string): Document that heif_colorspace_filter_array was added to development code.

> - fuzzing/oss-fuzz-build.sh (BUILD): Change JBIG oss-fuzz timeout to 65, since that is apparently the maximum value that ClusterFuzz allows.

2026-02-25 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - magick/paint.c (ColorFloodfillImage): Disable OpenMP since it was observed to create corrupt images, such as with the Magick++ shapes demo.

> - Magick++/lib/Image.cpp (Magick::Image::annotate): Follow DrawInfo normal allocation policies. Solves Coverity 501673 "Wrapper object use after free". I don't agree with Coverity's opinion, but there was other opportunity for a leak.

2026-02-24 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/log.c (ReadLogConfigureFile): Address Coverity 501657 "Unused value".

> - Magick++/lib/Magick++/Include.h: Still need to undef 'strlcpy' and 'strlcat'.

> - coders/heif.c (HEIF_channel_to_string): 'heif_channel_unknown' was added by changeset b4326c42 on 2/12/26 after v1.21.2.

> - Magick++/lib/Image.cpp (Magick::Image::annotate): Use C++ rather than C to form geometry string.

> - Magick++/lib/Geometry.cpp (Magick::Geometry::operator =): Use C++ rather than C to form geometry string.

> - fuzzing/oss-fuzz-build.sh: Disable system-provided strlcpy() and strlcat() in Autoconf scripts

2026-02-23 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/heif.c (ReadHEIFImageFrame): Handle per-channel bits_per_pixel_range properly. Addresses oss-fuzz 485932184 "graphicsmagick:coder_MP4_fuzzer: Heap-buffer-overflow in ReadHEIFImageFrame".

2026-02-22 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh: Handle SANITIZER=none.

2026-02-21 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh: Add an options file for coder_JBIG_fuzzer.

> - magick/render.c (DrawImage): The change to MagickGetToken() resulted in a change to 'encoding' behavior. Add a work-around.

> - magick/log.c (ReadLogConfigureFile): Use returned token length for purpose of optimization and error handling.

> - magick/utility.c (MagickGetToken): Now returns the size of the token which was parsed, which will be zero if no token was parsed.

2026-02-18 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/utils.cc (LLVMFuzzerInitialize): Enable use of LLVMFuzzerInitialize() to pass program path.

> - coders/heif.c (HEIF_channel_to_string): Include 'heif_channel_unknown' in switch statement.

2026-02-17 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - www/index.rst: Report that we are back down to zero Coverity defects.

> - coders/jpeg.c (WriteJPEGImage): Address Coverity 501589 "Resource leak".

> - magick/hclut.c (HaldClutImage): Address Coverity 501591 "Unchecked return value".

> - magick/enhance.c (ModulateImage): Address Coverity 501588 "Unchecked return value".

> - magick/composite.c (CompositeImage): Address Coverity 501590 "Unchecked return value".

> - magick/cdl.c (CdlImage): Address Coverity 501592 "Unchecked return value".

> - coders/tiff.c: (EXPERIMENTAL_EXIF_TAGS): Re-enable EXPERIMENTAL_EXIF_TAGS by default. Modify the EXIF blob tag transfer so that it will only transfer tags from EXIF and GPS IFDs. The code was also transferring tags from the main IFD, which may wreak havoc on the output file. Re-write the EXIF reader data marshalling functions to avoid alignment violations.

2026-02-16 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/tiff.c (EXPERIMENTAL_EXIF_TAGS): Disable experimental EXIF tags again since yesterday my understanding of the problem was wrong, and a correct solution should be implemented before it is enabled again. Revert changes from 2026-02-15.

2026-02-15 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/tiff.c (AddIFDExifFields): Don't transfer TIFFTAG_PLANARCONFIG since it is not an EXIF parameter. Addresses oss-fuzz "graphicsmagick:coder_TIFF_any_fuzzer: Heap-buffer-overflow in ExportViewPixelArea".

2026-02-12 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - NEWS.txt: Update the news.

> - www/INSTALL-unix.rst: Update documentation regarding using MSYS2 under Microsoft Windows.

2026-02-11 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - config/config.guess, config/config.sub: Update to latest.

> - fuzzing/README.txt: Add notes about configuring and building Jasper.

> - fuzzing/oss-fuzz-build.sh (BUILD): Fully specify available build options to Jasper's cmake.

2026-02-09 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - fuzzing/oss-fuzz-build.sh (BUILD): Add -DVVENC_ENABLE_WERROR=0 to the vvenc cmake arguments.

> - coders/xpm.c (ReadXPMImage): Fix the log message formatter for pixels.

2026-02-08 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - www/INSTALL-unix.rst: Describe configure options in the same order produced by "./configure --help". Clarify the descriptions for some options. Update OS distribution package lists.

> - configure.ac: Clarifications for help output messages.

> - config/type-windows.mgk.in: Add a comment that this file is for Windows XP font names.

2026-02-06 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/wmf.c (RegisterWMFImage): Register WMF to be in the UnstableCoderClass. (ReadWMFImage): Use the managed memory allocator. (util_set_brush): Comment the BS_DIBPATTERN implementation since bmp->data is non-NULL even though it was not set-up by ipa_bmp_read(). This addresses oss-fuzz 482160523 "graphicsmagick:coder_WMF_fuzzer: Segv on unknown address in DrawComposite".

> - coders/*.c: Check the return status from TransformColorspace() and GetImageCharacteristics() and attempt to perform appropriate error handling. These are complex functions which may fail, and the failure should handled immediately.

2026-02-05 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/xpm.c (WritePICONImage): Add full error checking, and error reporting. Addresses oss-fuzz 481985895 "graphicsmagick:coder_PICON_fuzzer: Indirect-leak in MagickMallocCleared" and os-fuzz 481985892 "Graphicsmagick:coder_PICON_fuzzer: Indirect-leak in _MagickReallocateResourceLimitedMemoryLoc". These problems became apparent due to the XPM/PICON reader issue fixed yesterday.

2026-02-04 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/xpm.c (ReadXPMImage): Verify that the expected number of pixels were transferred to the image. Addresses oss-fuzz 481429902 "graphicsmagick:coder_XPM_fuzzer: Use-of-uninitialized-value in GrayscalePseudoClassImage" and 481419152 "graphicsmagick:coder_XPM_fuzzer: Use-of-uninitialized-value in WriteXPMImage".

> - fuzzing/oss-fuzz-build.sh: Re-enable ASAN instrumentation of libjbig.

> - PerlMagick/MANIFEST: Update PerlMagick manifest.

2026-02-02 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/pixel_cache.c: Added/improved tracing for CacheEvent and ResourceEvent. Fixes for resource allocation logic.

> - magick/resource.c (LiberateMagickResource): Log resource limit information before an intentional crash.

> - fuzzing/dictionaries/MVG.dict: Updates for GraphicsMagick.

> - fuzzing/oss-fuzz-build.sh (BUILD): Libheif's pkgconf now reveals dependencies needed to statically link with x264, but not yet vvdec or vvenc. No longer add x264 dependencies.

> - coders/heif.c (ReadHEIFImage): Use strlcpy() to avoid benign clang scan-build report.

2026-02-01 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/colormap-private.h (VerifyColormapIndex): Update a MagickPassFail status variable. (VerifyColormapIndexWithColors): Update a MagickPassFail status variable.

2026-01-31 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - magick/pixel_cache.c: Trace the pixel cache identifier and filename at the end of the trace output.

> - magick/compress.c (HuffmanEncode2Image): Destroy 'huffman_image' if SetImageType() fails. Assure that 'scanline' is cleared.

> - fuzzing/oss-fuzz-build.sh: Disable ASAN instrumentation of libjbig.

2026-01-28 Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

> - coders/mat.c (ReadMATImage): Address oss-fuzz 479525103 "graphicsmagick:coder_MAT_fuzzer: Indirect-leak in ___interceptor_malloc".

> - magick/blob.c (GetConfigureBlob): Fix function documentation.

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.

Copyright © GraphicsMagick Group 2002-2026