File ImageMagick-CVE-2017-18209.patch of Package ImageMagick

Index: ImageMagick-6.8.8-1/magick/memory-private.h
===================================================================
--- ImageMagick-6.8.8-1.orig/magick/memory-private.h	2013-11-18 14:03:16.000000000 +0100
+++ ImageMagick-6.8.8-1/magick/memory-private.h	2018-03-14 14:25:36.031096338 +0100
@@ -41,6 +41,20 @@ extern "C" {
 #define MagickAssumeAligned(address)  (address)
 #endif
 
+static inline void *AcquireCriticalMemory(const size_t size)
+{
+  register void
+    *memory;
+
+  /*
+    Fail if memory request cannot be fulfilled.
+  */
+  memory=AcquireMagickMemory(size);
+  if (memory == (void *) NULL)
+    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  return(memory);
+}
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif
Index: ImageMagick-6.8.8-1/magick/opencl.c
===================================================================
--- ImageMagick-6.8.8-1.orig/magick/opencl.c	2013-12-22 03:08:38.000000000 +0100
+++ ImageMagick-6.8.8-1/magick/opencl.c	2018-03-14 14:30:23.472244625 +0100
@@ -59,6 +59,7 @@ Include declarations.
 #include "magick/layer.h"
 #include "magick/mime-private.h"
 #include "magick/memory_.h"
+#include "magick/memory-private.h"
 #include "magick/monitor.h"
 #include "magick/montage.h"
 #include "magick/morphology.h"
@@ -2570,7 +2571,7 @@ const char* GetOpenCLCachedFilesDirector
         (void) FormatLocaleString(path,MaxTextExtent,"%s%s.magick",home,
           DirectorySeparator);
         home=DestroyString(home);
-        temp = (char*)AcquireMagickMemory(strlen(path)+1);
+        temp = (char*)AcquireCriticalMemory(strlen(path)+1);
         CopyMagickString(temp,path,strlen(path)+1);
         status=GetPathAttributes(path,&attributes);
         if (status == MagickFalse) {
Index: ImageMagick-6.8.8-1/magick/registry.c
===================================================================
--- ImageMagick-6.8.8-1.orig/magick/registry.c	2013-12-01 15:47:50.000000000 +0100
+++ ImageMagick-6.8.8-1/magick/registry.c	2018-03-14 14:25:36.031096338 +0100
@@ -46,6 +46,7 @@
 #include "magick/image.h"
 #include "magick/list.h"
 #include "magick/memory_.h"
+#include "magick/memory-private.h"
 #include "magick/registry.h"
 #include "magick/splay-tree.h"
 #include "magick/string_.h"
@@ -514,9 +515,7 @@ MagickExport MagickBooleanType SetImageR
   }
   if (clone_value == (void *) NULL)
     return(MagickFalse);
-  registry_info=(RegistryInfo *) AcquireMagickMemory(sizeof(*registry_info));
-  if (registry_info == (RegistryInfo *) NULL)
-    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+  registry_info=(RegistryInfo *) AcquireCriticalMemory(sizeof(*registry_info));
   (void) ResetMagickMemory(registry_info,0,sizeof(*registry_info));
   registry_info->type=type;
   registry_info->value=clone_value;
openSUSE Build Service is sponsored by