Commit 951f6b094 for imagemagick.org
commit 951f6b0940224afc469f6a72503d6e011c688d02
Author: Dirk Lemstra <dirk@lemstra.org>
Date: Mon Jan 12 18:21:15 2026 +0100
Fixed memory leak that happens when someone creates a corrupt ImagemagickOpenCLDeviceProfile.xml file (GHSA-qp59-x883-77qv)
diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index dd47e304d..78ddf1aad 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -751,6 +751,21 @@ MagickPrivate cl_kernel AcquireOpenCLKernel(MagickCLDevice device,
*/
#if !MAGICKCORE_ZERO_CONFIGURATION_SUPPORT
+static MagickCLDeviceBenchmark* RelinquishDeviceBenchmark(
+ MagickCLDeviceBenchmark *device_benchmark)
+{
+ device_benchmark->platform_name=(char *) RelinquishMagickMemory(
+ device_benchmark->platform_name);
+ device_benchmark->vendor_name=(char *) RelinquishMagickMemory(
+ device_benchmark->vendor_name);
+ device_benchmark->name=(char *) RelinquishMagickMemory(
+ device_benchmark->name);
+ device_benchmark->version=(char *) RelinquishMagickMemory(
+ device_benchmark->version);
+ return((MagickCLDeviceBenchmark *) RelinquishMagickMemory(
+ device_benchmark));
+}
+
static void LoadOpenCLDeviceBenchmark(MagickCLEnv clEnv,const char *xml)
{
char
@@ -836,17 +851,7 @@ static void LoadOpenCLDeviceBenchmark(MagickCLEnv clEnv,const char *xml)
}
}
}
-
- device_benchmark->platform_name=(char *) RelinquishMagickMemory(
- device_benchmark->platform_name);
- device_benchmark->vendor_name=(char *) RelinquishMagickMemory(
- device_benchmark->vendor_name);
- device_benchmark->name=(char *) RelinquishMagickMemory(
- device_benchmark->name);
- device_benchmark->version=(char *) RelinquishMagickMemory(
- device_benchmark->version);
- device_benchmark=(MagickCLDeviceBenchmark *) RelinquishMagickMemory(
- device_benchmark);
+ device_benchmark=RelinquishDeviceBenchmark(device_benchmark);
continue;
}
(void) GetNextToken(q,(const char **) NULL,extent,token);
@@ -906,8 +911,7 @@ static void LoadOpenCLDeviceBenchmark(MagickCLEnv clEnv,const char *xml)
}
}
token=(char *) RelinquishMagickMemory(token);
- device_benchmark=(MagickCLDeviceBenchmark *) RelinquishMagickMemory(
- device_benchmark);
+ device_benchmark=RelinquishDeviceBenchmark(device_benchmark);
}
static MagickBooleanType CanWriteProfileToFile(const char *filename)