Commit 116c283a0 for imagemagick.org
commit 116c283a011c6b6eb357c120de802d6df8aae6f8
Author: Cristy <urban-warrior@imagemagick.org>
Date: Thu Nov 5 11:21:01 2026 -0500
Privat://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-w85x-jcrh-64rr
diff --git a/MagickCore/registry.c b/MagickCore/registry.c
index 850e26ef7..cb3de3269 100644
--- a/MagickCore/registry.c
+++ b/MagickCore/registry.c
@@ -152,12 +152,20 @@ MagickExport MagickBooleanType DefineImageRegistry(const RegistryType type,
*/
MagickExport MagickBooleanType DeleteImageRegistry(const char *key)
{
+ MagickBooleanType
+ status;
+
assert(key != (const char *) NULL);
if (IsEventLogging() != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",key);
if (registry == (void *) NULL)
return(MagickFalse);
- return(DeleteNodeFromSplayTree(registry,key));
+ if (registry_semaphore == (SemaphoreInfo *) NULL)
+ ActivateSemaphoreInfo(®istry_semaphore);
+ LockSemaphoreInfo(registry_semaphore);
+ status=DeleteNodeFromSplayTree(registry,key);
+ UnlockSemaphoreInfo(registry_semaphore);
+ return(status);
}
/*
@@ -201,9 +209,15 @@ MagickExport void *GetImageRegistry(const RegistryType type,const char *key,
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",key);
if (registry == (void *) NULL)
return((void *) NULL);
+ if (registry_semaphore == (SemaphoreInfo *) NULL)
+ ActivateSemaphoreInfo(®istry_semaphore);
+ LockSemaphoreInfo(registry_semaphore);
registry_info=(RegistryInfo *) GetValueFromSplayTree(registry,key);
if (registry_info == (void *) NULL)
- return((void *) NULL);
+ {
+ UnlockSemaphoreInfo(registry_semaphore);
+ return((void *) NULL);
+ }
value=(void *) NULL;
switch (type)
{
@@ -248,6 +262,7 @@ MagickExport void *GetImageRegistry(const RegistryType type,const char *key,
default:
break;
}
+ UnlockSemaphoreInfo(registry_semaphore);
return(value);
}
@@ -359,12 +374,20 @@ MagickPrivate void RegistryComponentTerminus(void)
*/
MagickExport void *RemoveImageRegistry(const char *key)
{
+ void
+ *value;
+
assert(key != (const char *) NULL);
if (IsEventLogging() != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",key);
if (registry == (void *) NULL)
return((void *) NULL);
- return(RemoveNodeFromSplayTree(registry,key));
+ if (registry_semaphore == (SemaphoreInfo *) NULL)
+ ActivateSemaphoreInfo(®istry_semaphore);
+ LockSemaphoreInfo(registry_semaphore);
+ value=RemoveNodeFromSplayTree(registry,key);
+ UnlockSemaphoreInfo(registry_semaphore);
+ return(value);
}
/*
@@ -463,6 +486,9 @@ MagickExport MagickBooleanType SetImageRegistry(const RegistryType type,
void
*clone_value;
+ MagickBooleanType
+ status;
+
assert(key != (const char *) NULL);
if (IsEventLogging() != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",key);
@@ -523,15 +549,13 @@ MagickExport MagickBooleanType SetImageRegistry(const RegistryType type,
registry_info->type=type;
registry_info->value=clone_value;
registry_info->signature=MagickCoreSignature;
+ if (registry_semaphore == (SemaphoreInfo *) NULL)
+ ActivateSemaphoreInfo(®istry_semaphore);
+ LockSemaphoreInfo(registry_semaphore);
if (registry == (SplayTreeInfo *) NULL)
- {
- if (registry_semaphore == (SemaphoreInfo *) NULL)
- ActivateSemaphoreInfo(®istry_semaphore);
- LockSemaphoreInfo(registry_semaphore);
- if (registry == (SplayTreeInfo *) NULL)
- registry=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
- DestroyRegistryNode);
- UnlockSemaphoreInfo(registry_semaphore);
- }
- return(AddValueToSplayTree(registry,ConstantString(key),registry_info));
+ registry=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
+ DestroyRegistryNode);
+ status=AddValueToSplayTree(registry,ConstantString(key),registry_info);
+ UnlockSemaphoreInfo(registry_semaphore);
+ return(status);
}