Commit 017a8363a for imagemagick.org
commit 017a8363ac60affd2c1032aaa57177521c653ccf
Author: Cristy <urban-warrior@imagemagick.org>
Date: Sat Feb 14 07:26:10 2026 -0500
avoid deadly embrace for recursive MSL/SVG
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index 43453c64a..f57f4656f 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -735,14 +735,14 @@ MagickExport Image *ReadImage(const ImageInfo *image_info,
Call appropriate image reader based on image type.
*/
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
- LockSemaphoreInfo(read_info->semaphore);
+ LockSemaphoreInfo(magick_info->semaphore);
status=IsCoderAuthorized(magick_info->magick_module,read_info->magick,
ReadPolicyRights,exception);
image=(Image *) NULL;
if (status != MagickFalse)
image=decoder(read_info,exception);
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
- UnlockSemaphoreInfo(read_info->semaphore);
+ UnlockSemaphoreInfo(magick_info->semaphore);
}
else
{
@@ -770,11 +770,11 @@ MagickExport Image *ReadImage(const ImageInfo *image_info,
MagickPathExtent);
*read_info->filename='\0';
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- LockSemaphoreInfo(read_info->semaphore);
+ LockSemaphoreInfo(delegate_info->semaphore);
status=InvokeDelegate(read_info,image,read_info->magick,(char *) NULL,
exception);
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- UnlockSemaphoreInfo(read_info->semaphore);
+ UnlockSemaphoreInfo(delegate_info->semaphore);
image=DestroyImageList(image);
read_info->temporary=MagickTrue;
if (status != MagickFalse)
@@ -797,14 +797,14 @@ MagickExport Image *ReadImage(const ImageInfo *image_info,
Call appropriate image reader based on image type.
*/
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
- LockSemaphoreInfo(read_info->semaphore);
+ LockSemaphoreInfo(magick_info->semaphore);
status=IsCoderAuthorized(magick_info->magick_module,read_info->magick,
ReadPolicyRights,exception);
image=(Image *) NULL;
if (status != MagickFalse)
image=(decoder)(read_info,exception);
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
- UnlockSemaphoreInfo(read_info->semaphore);
+ UnlockSemaphoreInfo(magick_info->semaphore);
}
if (read_info->temporary != MagickFalse)
{
@@ -1339,13 +1339,13 @@ MagickExport MagickBooleanType WriteImage(const ImageInfo *image_info,
Call appropriate image writer based on image type.
*/
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
- LockSemaphoreInfo(write_info->semaphore);
+ LockSemaphoreInfo(magick_info->semaphore);
status=IsCoderAuthorized(magick_info->magick_module,write_info->magick,
WritePolicyRights,exception);
if (status != MagickFalse)
status=encoder(write_info,image,exception);
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
- UnlockSemaphoreInfo(write_info->semaphore);
+ UnlockSemaphoreInfo(magick_info->semaphore);
}
else
{
@@ -1357,11 +1357,11 @@ MagickExport MagickBooleanType WriteImage(const ImageInfo *image_info,
*/
*write_info->filename='\0';
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- LockSemaphoreInfo(write_info->semaphore);
+ LockSemaphoreInfo(delegate_info->semaphore);
status=InvokeDelegate(write_info,image,(char *) NULL,
write_info->magick,exception);
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
- UnlockSemaphoreInfo(write_info->semaphore);
+ UnlockSemaphoreInfo(delegate_info->semaphore);
(void) CopyMagickString(image->filename,filename,MagickPathExtent);
}
else
@@ -1411,13 +1411,13 @@ MagickExport MagickBooleanType WriteImage(const ImageInfo *image_info,
Call appropriate image writer based on image type.
*/
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
- LockSemaphoreInfo(write_info->semaphore);
- status=IsCoderAuthorized(magick_info->magick_module,
- write_info->magick,WritePolicyRights,exception);
+ LockSemaphoreInfo(magick_info->semaphore);
+ status=IsCoderAuthorized(magick_info->magick_module,write_info->magick,
+ WritePolicyRights,exception);
if (status != MagickFalse)
status=encoder(write_info,image,exception);
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
- UnlockSemaphoreInfo(write_info->semaphore);
+ UnlockSemaphoreInfo(magick_info->semaphore);
}
}
}
diff --git a/MagickCore/image.c b/MagickCore/image.c
index c27320b65..34d6104b3 100644
--- a/MagickCore/image.c
+++ b/MagickCore/image.c
@@ -1287,8 +1287,6 @@ MagickExport ImageInfo *DestroyImageInfo(ImageInfo *image_info)
image_info->profile=(void *) DestroyStringInfo((StringInfo *)
image_info->profile);
DestroyImageOptions(image_info);
- if (image_info->semaphore != (SemaphoreInfo *) NULL)
- RelinquishSemaphoreInfo(&image_info->semaphore);
image_info->signature=(~MagickCoreSignature);
image_info=(ImageInfo *) RelinquishMagickMemory(image_info);
return(image_info);
@@ -1380,7 +1378,6 @@ MagickExport void GetImageInfo(ImageInfo *image_info)
GetPixelInfoRGBA(TransparentColorRGBA,&image_info->transparent_color);
image_info->debug=(GetLogEventMask() & ImageEvent) != 0 ? MagickTrue :
MagickFalse;
- image_info->semaphore=AcquireSemaphoreInfo();
image_info->signature=MagickCoreSignature;
}
diff --git a/MagickCore/image.h b/MagickCore/image.h
index e3ba12648..bbc3dfe33 100644
--- a/MagickCore/image.h
+++ b/MagickCore/image.h
@@ -475,9 +475,6 @@ struct _ImageInfo
PixelInfo
matte_color; /* matte (frame) color */
-
- SemaphoreInfo
- *semaphore;
};
extern MagickExport ChannelType
diff --git a/MagickCore/magick.h b/MagickCore/magick.h
index 7a7e1e860..82b17d911 100644
--- a/MagickCore/magick.h
+++ b/MagickCore/magick.h
@@ -145,7 +145,7 @@ extern const MagickExport MagickInfo
**GetMagickInfoList(const char *,size_t *,ExceptionInfo *);
extern MagickExport MagickInfo
- *AcquireMagickInfo(const char *, const char *, const char *);
+ *AcquireMagickInfo(const char *,const char *,const char *);
extern MagickExport void
MagickCoreGenesis(const char *,const MagickBooleanType),
diff --git a/coders/msl.c b/coders/msl.c
index e93700264..4e881b132 100644
--- a/coders/msl.c
+++ b/coders/msl.c
@@ -7563,7 +7563,6 @@ ModuleExport size_t RegisterMSLImage(void)
entry->decoder=(DecodeImageHandler *) ReadMSLImage;
entry->encoder=(EncodeImageHandler *) WriteMSLImage;
#endif
- entry->flags^=CoderDecoderThreadSupportFlag;
entry->format_type=ImplicitFormatType;
(void) RegisterMagickInfo(entry);
return(MagickImageCoderSignature);
diff --git a/coders/svg.c b/coders/svg.c
index 02f08cca7..bf540357d 100644
--- a/coders/svg.c
+++ b/coders/svg.c
@@ -3421,7 +3421,6 @@ ModuleExport size_t RegisterSVGImage(void)
entry->decoder=(DecodeImageHandler *) ReadSVGImage;
#endif
entry->encoder=(EncodeImageHandler *) WriteSVGImage;
- entry->flags^=CoderDecoderThreadSupportFlag;
entry->magick=(IsImageFormatHandler *) IsSVG;
(void) RegisterMagickInfo(entry);
return(MagickImageCoderSignature);