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.
