Commit abbad0118 for imagemagick.org

commit abbad011826163d37cf3033367f23a142d9ee742
Author: Cristy <urban-warrior@imagemagick.org>
Date:   Sun Apr 26 11:18:22 2026 -0400

    extent was computed in bytes; now in element count

diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index e698f7f99..c9e2af3c0 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -2279,73 +2279,58 @@ MagickExport MagickBooleanType DrawGradientImage(Image *image,
 %
 */

-static MagickBooleanType CheckPrimitiveExtent(MVGInfo *mvg_info,
+static inline MagickBooleanType CheckPrimitiveExtent(MVGInfo *mvg_info,
   const double pad)
 {
-  char
-    **text = (char **) NULL;
-
-  double
-    extent;
+  PrimitiveInfo
+    *primitive_info;

   size_t
-    quantum;
+    extent;

   ssize_t
     i;

   /*
-    Check if there is enough storage for drawing primitives.
+    Pad is double, but extent must be element count.
   */
-  quantum=sizeof(**mvg_info->primitive_info);
-  extent=(double) mvg_info->offset+pad+(PrimitiveExtentPad+1)*(double) quantum;
-  if (extent <= (double) *mvg_info->extent)
+  extent=(size_t) (mvg_info->offset+pad+PrimitiveExtentPad+1);
+  if (extent <= *mvg_info->extent)
     return(MagickTrue);
-  if ((((extent+1)*(double) quantum) >= (double) GetMaxMemoryRequest()) ||
-      (IsNaN(extent) != 0))
+  if (extent >= GetMaxMemoryRequest())
     return(MagickFalse);
-  if (mvg_info->offset > 0)
-    {
-      text=(char **) AcquireQuantumMemory((size_t) mvg_info->offset,
-        sizeof(*text));
-      if (text == (char **) NULL)
-        return(MagickFalse);
-      for (i=0; i < mvg_info->offset; i++)
-        text[i]=(*mvg_info->primitive_info)[i].text;
-    }
-  *mvg_info->primitive_info=(PrimitiveInfo *) ResizeQuantumMemory(
-    *mvg_info->primitive_info,(size_t) (extent+1),quantum);
-  if (*mvg_info->primitive_info != (PrimitiveInfo *) NULL)
-    {
-      if (text != (char **) NULL)
-        text=(char **) RelinquishMagickMemory(text);
-      *mvg_info->extent=(size_t) extent;
-      for (i=mvg_info->offset+1; i <= (ssize_t) extent; i++)
-      {
-        (*mvg_info->primitive_info)[i].primitive=UndefinedPrimitive;
-        (*mvg_info->primitive_info)[i].text=(char *) NULL;
-      }
-      return(MagickTrue);
-    }
   /*
-    Reallocation failed, allocate a primitive to facilitate unwinding.
+    Attempt to grow the primitive_info array.
   */
-  if (text != (char **) NULL)
+  primitive_info=(PrimitiveInfo *) ResizeQuantumMemory(
+    *mvg_info->primitive_info,extent,sizeof(PrimitiveInfo));
+  if (primitive_info == (PrimitiveInfo *) NULL)
     {
-      for (i=0; i < mvg_info->offset; i++)
-        if (text[i] != (char *) NULL)
-          text[i]=DestroyString(text[i]);
-      text=(char **) RelinquishMagickMemory(text);
+      /*
+        Allocation failed: reset to minimal safe state
+      */
+      ThrowMagickException(mvg_info->exception,GetMagickModule(),
+        ResourceLimitError,"MemoryAllocationFailed","`%s'","");
+      primitive_info=(PrimitiveInfo *) AcquireCriticalMemory(
+        (PrimitiveExtentPad+1)*sizeof(PrimitiveInfo));
+      (void) memset(primitive_info,0,(PrimitiveExtentPad+1)*
+        sizeof(PrimitiveInfo));
+      *mvg_info->primitive_info=primitive_info;
+      *mvg_info->extent=PrimitiveExtentPad+1;
+      mvg_info->offset=0;
+      return(MagickFalse);
     }
-  (void) ThrowMagickException(mvg_info->exception,GetMagickModule(),
-    ResourceLimitError,"MemoryAllocationFailed","`%s'","");
-  *mvg_info->primitive_info=(PrimitiveInfo *) AcquireCriticalMemory((size_t)
-    (PrimitiveExtentPad+1)*quantum);
-  (void) memset(*mvg_info->primitive_info,0,(size_t) ((PrimitiveExtentPad+1)*
-    quantum));
-  *mvg_info->extent=1;
-  mvg_info->offset=0;
-  return(MagickFalse);
+  /*
+    Initialize newly allocated elements.
+  */
+  for (i=(ssize_t) *mvg_info->extent; i < (ssize_t) extent; i++)
+  {
+    primitive_info[i].primitive=UndefinedPrimitive;
+    primitive_info[i].text=(char *) NULL;
+  }
+  *mvg_info->primitive_info=primitive_info;
+  *mvg_info->extent=extent;
+  return(MagickTrue);
 }

 static inline double GetDrawValue(const char *magick_restrict string,