Commit cef465732 for imagemagick.org
commit cef465732ef78ec1dc13a923b93b199018f0cbeb
Author: Cristy <urban-warrior@imagemagick.org>
Date: Sat May 2 15:26:46 2026 -0400
free primitive info text if allocation fails
diff --git a/MagickCore/draw.c b/MagickCore/draw.c
index 423eab947..2025f3547 100644
--- a/MagickCore/draw.c
+++ b/MagickCore/draw.c
@@ -2283,6 +2283,7 @@ static inline MagickBooleanType CheckPrimitiveExtent(MVGInfo *mvg_info,
const double pad)
{
PrimitiveInfo
+ *clone_info,
*primitive_info;
size_t
@@ -2302,15 +2303,20 @@ static inline MagickBooleanType CheckPrimitiveExtent(MVGInfo *mvg_info,
/*
Attempt to grow the primitive_info array.
*/
- primitive_info=(PrimitiveInfo *) ResizeQuantumMemory(
- *mvg_info->primitive_info,extent,sizeof(PrimitiveInfo));
- if (primitive_info == (PrimitiveInfo *) NULL)
+ primitive_info=(*mvg_info->primitive_info);
+ clone_info=(PrimitiveInfo *) ResizeQuantumMemory(primitive_info,extent,
+ sizeof(PrimitiveInfo));
+ if (clone_info != (PrimitiveInfo *) NULL)
+ primitive_info=clone_info;
+ else
{
/*
- Allocation failed: reset to minimal safe state
+ Allocation failed: reset to minimal safe state.
*/
- ThrowMagickException(mvg_info->exception,GetMagickModule(),
- ResourceLimitError,"MemoryAllocationFailed","`%s'","");
+ for (i=0; primitive_info[i].primitive != UndefinedPrimitive; i++)
+ if (primitive_info[i].text != (char *) NULL)
+ primitive_info[i].text=DestroyString(primitive_info[i].text);
+ primitive_info=(PrimitiveInfo *) RelinquishMagickMemory(primitive_info);
primitive_info=(PrimitiveInfo *) AcquireCriticalMemory((size_t)
(PrimitiveExtentPad+1)*sizeof(PrimitiveInfo));
(void) memset(primitive_info,0,(size_t) (PrimitiveExtentPad+1)*
@@ -2318,6 +2324,8 @@ static inline MagickBooleanType CheckPrimitiveExtent(MVGInfo *mvg_info,
*mvg_info->primitive_info=primitive_info;
*mvg_info->extent=(size_t) (PrimitiveExtentPad+1);
mvg_info->offset=0;
+ ThrowMagickException(mvg_info->exception,GetMagickModule(),
+ ResourceLimitError,"MemoryAllocationFailed","`%s'","");
return(MagickFalse);
}
/*