File ImageMagick-CVE-2026-25798.patch of Package ImageMagick.42998

From 16dd3158ce197c6f65e7798a7a5cc4538bb0303e Mon Sep 17 00:00:00 2001
From: Cristy <urban-warrior@imagemagick.org>
Date: Sun, 1 Feb 2026 14:56:14 -0500
Subject: [PATCH] 
 https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-p863-5fgm-rgq4

---
 MagickCore/cache.c | 37 +++++++++++++++++++++++++++++++++----
 coders/sixel.c     |  4 ++--
 2 files changed, 35 insertions(+), 6 deletions(-)

Index: ImageMagick-7.1.0-9/MagickCore/cache.c
===================================================================
--- ImageMagick-7.1.0-9.orig/MagickCore/cache.c
+++ ImageMagick-7.1.0-9/MagickCore/cache.c
@@ -3491,6 +3491,25 @@ static MagickBooleanType MaskPixelCacheN
 %
 */
 
+static inline MagickBooleanType CacheOverflowSanityCheckGetSize(
+  const MagickSizeType count,const size_t quantum,MagickSizeType *const extent)
+{
+  MagickSizeType
+    length;
+
+  if ((count == 0) || (quantum == 0))
+    return(MagickTrue);
+  length=count*quantum;
+  if (quantum != (length/count))
+    {
+      errno=ENOMEM;
+      return(MagickTrue);
+    }
+  if (extent != NULL)
+    *extent=length;
+  return(MagickFalse);
+}
+
 static MagickBooleanType OpenPixelCacheOnDisk(CacheInfo *cache_info,
   const MapMode mode)
 {
@@ -3642,7 +3661,7 @@ static MagickBooleanType OpenPixelCache(
     status;
 
   MagickSizeType
-    length,
+    length = 0,
     number_pixels;
 
   size_t
@@ -3713,12 +3732,22 @@ static MagickBooleanType OpenPixelCache(
   packet_size=MagickMax(cache_info->number_channels,1)*sizeof(Quantum);
   if (image->metacontent_extent != 0)
     packet_size+=cache_info->metacontent_extent;
-  length=number_pixels*packet_size;
+  if (CacheOverflowSanityCheckGetSize(number_pixels,packet_size,&length) != MagickFalse)
+    {
+      cache_info->storage_class=UndefinedClass;
+      cache_info->length=0;
+      ThrowBinaryException(ResourceLimitError,"PixelCacheAllocationFailed",
+      image->filename);
+    }
   columns=(size_t) (length/cache_info->rows/packet_size);
   if ((cache_info->columns != columns) || ((ssize_t) cache_info->columns < 0) ||
       ((ssize_t) cache_info->rows < 0))
-    ThrowBinaryException(ResourceLimitError,"PixelCacheAllocationFailed",
-      image->filename);
+    {
+      cache_info->storage_class=UndefinedClass;
+      cache_info->length=0;
+      ThrowBinaryException(ResourceLimitError,"PixelCacheAllocationFailed",
+        image->filename);
+    }
   cache_info->length=length;
   if (image->ping != MagickFalse)
     {
Index: ImageMagick-7.1.0-9/coders/sixel.c
===================================================================
--- ImageMagick-7.1.0-9.orig/coders/sixel.c
+++ ImageMagick-7.1.0-9/coders/sixel.c
@@ -541,7 +541,7 @@ static MagickBooleanType sixel_decode(Im
                       if (max_x < posision_x)
                           max_x = posision_x;
                       if (max_y < (posision_y + i))
-                          max_y = posision_y + i;
+                          max_y = (int)(posision_y + i);
                     }
                   sixel_vertical_mask <<= 1;
                 }
@@ -574,7 +574,7 @@ static MagickBooleanType sixel_decode(Im
                       if (max_x < (posision_x+repeat_count-1))
                         max_x = posision_x+repeat_count-1;
                       if (max_y < (posision_y+i+n-1))
-                        max_y = posision_y+i+n-1;
+                        max_y = (int)(posision_y+i+n-1);
                       i+=(n-1);
                       sixel_vertical_mask <<= (n-1);
                     }
openSUSE Build Service is sponsored by