Merge branch 'master' of git.imagemagick.org:repos/ImageMagick
diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c
index 26ea08e..fb185b1 100644
--- a/MagickCore/morphology.c
+++ b/MagickCore/morphology.c
@@ -2631,6 +2631,7 @@
     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++)
     changes[i]=0;
+
   if ((method == ConvolveMorphology) && (kernel->width == 1))
     {
       register ssize_t
@@ -2701,14 +2702,11 @@
               *restrict pixels;
 
             register ssize_t
-              u;
+              v;
 
             size_t
               count;
 
-            ssize_t
-              v;
-
             channel=GetPixelChannelChannel(image,i);
             traits=GetPixelChannelTraits(image,channel);
             morphology_traits=GetPixelChannelTraits(morphology_image,channel);
@@ -2721,7 +2719,7 @@
                 SetPixelChannel(morphology_image,channel,p[center+i],q);
                 continue;
               }
-            k=(&kernel->values[kernel->width*kernel->height-1]);
+            k=(&kernel->values[kernel->height-1]);
             pixels=p;
             pixel=bias;
             gamma=0.0;
@@ -2729,39 +2727,33 @@
             if ((morphology_traits & BlendPixelTrait) == 0)
               for (v=0; v < (ssize_t) kernel->height; v++)
               {
-                for (u=0; u < (ssize_t) kernel->width; u++)
-                {
-                  if (!IsNaN(*k))
-                    {
-                      pixel+=(*k)*pixels[i];
-                      gamma+=(*k);
-                      count++;
-                    }
-                  k--;
-                  pixels+=GetPixelChannels(image);
-                }
+                if (!IsNaN(*k))
+                  {
+                    pixel+=(*k)*pixels[i];
+                    gamma+=(*k);
+                    count++;
+                  }
+                k--;
+                pixels+=GetPixelChannels(image);
               }
             else
               for (v=0; v < (ssize_t) kernel->height; v++)
               {
-                for (u=0; u < (ssize_t) kernel->width; u++)
-                {
-                  if (!IsNaN(*k))
-                    {
-                      alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels));
-                      pixel+=alpha*(*k)*pixels[i];
-                      gamma+=alpha*(*k);
-                      count++;
-                    }
-                  k--;
-                  pixels+=GetPixelChannels(image);
-                }
+                if (!IsNaN(*k))
+                  {
+                    alpha=(double) (QuantumScale*GetPixelAlpha(image,pixels));
+                    pixel+=alpha*(*k)*pixels[i];
+                    gamma+=alpha*(*k);
+                    count++;
+                  }
+                k--;
+                pixels+=GetPixelChannels(image);
               }
             if (fabs(pixel-p[center+i]) > MagickEpsilon)
               changes[id]++;
             gamma=PerceptibleReciprocal(gamma);
             if (count != 0)
-              gamma*=(double) kernel->height*kernel->width/count;
+              gamma*=(double) kernel->height/count;
             SetPixelChannel(morphology_image,channel,ClampToQuantum(gamma*
               pixel),q);
           }
diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c
index 4790c7b..6d481f0 100644
--- a/MagickWand/mogrify.c
+++ b/MagickWand/mogrify.c
@@ -395,7 +395,9 @@
   register char
     *p;
 
-  if (extent < 2)
+  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
+    return(MagickTrue);
+  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
     return(MagickTrue);
   (void) CopyMagickMemory(tag,text,MagickPathExtent);
   p=strrchr(tag,'/');
diff --git a/MagickWand/operation.c b/MagickWand/operation.c
index 1e2bcaa..14a835f 100644
--- a/MagickWand/operation.c
+++ b/MagickWand/operation.c
@@ -101,7 +101,9 @@
   register char
     *p;
 
-  if (extent < 2)
+  if ((extent <= 1) || (offset < 0) || (offset >= (MagickOffsetType) extent))
+    return(MagickTrue);
+  if ((offset != (MagickOffsetType) (extent-1)) && ((offset % 50) != 0))
     return(MagickTrue);
   (void) CopyMagickMemory(tag,text,MagickPathExtent);
   p=strrchr(tag,'/');