]> granicus.if.org Git - imagemagick/commitdiff
Added extra guards to prevent out of bound access.
authordirk <dirk@git.imagemagick.org>
Mon, 20 Jun 2016 22:06:17 +0000 (00:06 +0200)
committerdirk <dirk@git.imagemagick.org>
Mon, 20 Jun 2016 22:08:59 +0000 (00:08 +0200)
MagickCore/accelerate.c

index 3a341c44e3b5f1fd30e8c3dc598a663804234cc0..fb6ddee322550865ddf8315c013642ee8f067f94 100644 (file)
@@ -429,13 +429,15 @@ static Image *ComputeAddNoiseImage(const Image *image,MagickCLEnv clEnv,
   queue=AcquireOpenCLCommandQueue(device);
   if (queue == (cl_command_queue) NULL)
     goto cleanup;
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,image->columns,image->rows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
@@ -620,13 +622,15 @@ static Image *ComputeBlurImage(const Image* image,MagickCLEnv clEnv,
 
   device=RequestOpenCLDevice(clEnv);
   queue=AcquireOpenCLCommandQueue(device);
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,image->columns,image->rows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
@@ -4378,13 +4382,15 @@ static Image *ComputeResizeImage(const Image* image,MagickCLEnv clEnv,
 
   device=RequestOpenCLDevice(clEnv);
   queue=AcquireOpenCLCommandQueue(device);
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,resizedColumns,resizedRows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
@@ -4595,13 +4601,15 @@ static Image* ComputeRotationalBlurImage(const Image *image,MagickCLEnv clEnv,
 
   device=RequestOpenCLDevice(clEnv);
   queue=AcquireOpenCLCommandQueue(device);
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,image->columns,image->rows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
@@ -4793,13 +4801,15 @@ static Image *ComputeUnsharpMaskImage(const Image *image,MagickCLEnv clEnv,
 
   device=RequestOpenCLDevice(clEnv);
   queue=AcquireOpenCLCommandQueue(device);
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,image->columns,image->rows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
@@ -4965,13 +4975,15 @@ static Image *ComputeUnsharpMaskImageSingle(const Image *image,
 
   device=RequestOpenCLDevice(clEnv);
   queue=AcquireOpenCLCommandQueue(device);
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,image->columns,image->rows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;
@@ -5117,13 +5129,15 @@ static Image *ComputeWaveletDenoiseImage(const Image *image,MagickCLEnv clEnv,
 
   device=RequestOpenCLDevice(clEnv);
   queue=AcquireOpenCLCommandQueue(device);
-  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
-  if (imageBuffer == (cl_mem) NULL)
-    goto cleanup;
   filteredImage=CloneImage(image,image->columns,image->rows,MagickTrue,
     exception);
   if (filteredImage == (Image *) NULL)
     goto cleanup;
+  if (filteredImage->number_channels != image->number_channels)
+    goto cleanup;
+  imageBuffer=GetAuthenticOpenCLBuffer(image,device,exception);
+  if (imageBuffer == (cl_mem) NULL)
+    goto cleanup;
   filteredImageBuffer=GetAuthenticOpenCLBuffer(filteredImage,device,exception);
   if (filteredImageBuffer == (cl_mem) NULL)
     goto cleanup;