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,'/');