]> granicus.if.org Git - imagemagick/commitdiff
...
authorCristy <urban-warrior@imagemagick.org>
Tue, 7 Jun 2016 23:29:34 +0000 (19:29 -0400)
committerCristy <urban-warrior@imagemagick.org>
Tue, 7 Jun 2016 23:29:34 +0000 (19:29 -0400)
MagickCore/effect.c

index 924c47eed3d5c1120b5403825ddaa1ec1fc01f87..2062cfd18bfdf2d36178296c1b8de284ea66a4d3 100644 (file)
@@ -1686,6 +1686,9 @@ MagickExport Image *LocalContrastImage(const Image *image,const double radius,
   Image
     *contrast_image;
 
+  MagickBooleanType
+    status;
+
   MemoryInfo
     *scanLinePixels_info,
     *interImage_info;
@@ -1747,6 +1750,7 @@ MagickExport Image *LocalContrastImage(const Image *image,const double radius,
   /*
     Vertical pass.
   */
+  status=MagickTrue;
   {
     ssize_t
       x;
@@ -1774,11 +1778,18 @@ MagickExport Image *LocalContrastImage(const Image *image,const double radius,
       ssize_t
         i;
 
+      if (status == MagickFalse)
+        continue;
       pixels=scanLinePixels;
       pixels+=id*scanLineSize;
       pix=pixels;
       p=GetCacheViewVirtualPixels(image_view,x,-width,1,image->rows+(2*width),
         exception);
+      if (p == (const Quantum *) NULL)
+        {
+          status=MagickFalse;
+          continue;
+        }
       for (y=0; y < (ssize_t) image->rows+(2*width); y++)
       {
         *pix++=(float)GetPixelLuma(image,p);
@@ -1848,12 +1859,18 @@ MagickExport Image *LocalContrastImage(const Image *image,const double radius,
       ssize_t
         i;
 
+      if (status == MagickFalse)
+        continue;
       pixels=scanLinePixels;
       pixels+=id*scanLineSize;
-      p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,
-        exception);
+      p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception);
       q=GetCacheViewAuthenticPixels(contrast_view,0,y,image->columns,1,
         exception);
+      if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL))
+        {
+          status=MagickFalse;
+          continue;
+        }
       memcpy(pixels,interImage+(y*(image->columns+(2*width))),(image->columns+
         (2*width))*sizeof(float));
       for (x=0; x < (ssize_t) image->columns; x++)
@@ -1890,12 +1907,16 @@ MagickExport Image *LocalContrastImage(const Image *image,const double radius,
         p+=image->number_channels;
         q+=contrast_image->number_channels;
       }
+      if (SyncCacheViewAuthenticPixels(contrast_view,exception) == MagickFalse)
+        status=MagickFalse;
     }
   }
   scanLinePixels_info=RelinquishVirtualMemory(scanLinePixels_info);
   interImage_info=RelinquishVirtualMemory(interImage_info);
   contrast_view=DestroyCacheView(contrast_view);
   image_view=DestroyCacheView(image_view);
+  if (status == MagickFalse)
+    contrast_image=DestroyImage(contrast_image);
   return(contrast_image);
 }
 \f
@@ -3476,7 +3497,7 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
         GetPixelIntensity(linear_image,pre-GetPixelChannels(linear_image))-
         GetPixelIntensity(linear_image,pre)-
         GetPixelIntensity(linear_image,pre+GetPixelChannels(linear_image)));
-      if ((fabs(normal.x) <= MagickEpsilon) && 
+      if ((fabs(normal.x) <= MagickEpsilon) &&
           (fabs(normal.y) <= MagickEpsilon))
         shade=light.z;
       else