File ImageMagick-CVE-2019-13391,13308,13302.patch of Package ImageMagick.30356
Index: ImageMagick-7.0.7-34/MagickCore/fourier.c
===================================================================
--- ImageMagick-7.0.7-34.orig/MagickCore/fourier.c 2018-05-20 17:55:43.000000000 +0200
+++ ImageMagick-7.0.7-34/MagickCore/fourier.c 2019-07-19 14:26:01.337331241 +0200
@@ -164,6 +164,9 @@ MagickExport Image *ComplexImages(const
MagickOffsetType
progress;
+ size_t
+ number_channels;
+
ssize_t
y;
@@ -216,6 +219,10 @@ MagickExport Image *ComplexImages(const
}
Cr_image=complex_images;
Ci_image=complex_images->next;
+ number_channels=MagickMin(MagickMin(MagickMin(
+ Ar_image->number_channels,Ai_image->number_channels),MagickMin(
+ Br_image->number_channels,Bi_image->number_channels)),MagickMin(
+ Cr_image->number_channels,Ci_image->number_channels));
Ar_view=AcquireVirtualCacheView(Ar_image,exception);
Ai_view=AcquireVirtualCacheView(Ai_image,exception);
Br_view=AcquireVirtualCacheView(Br_image,exception);
@@ -226,9 +233,9 @@ MagickExport Image *ComplexImages(const
progress=0;
#if defined(MAGICKCORE_OPENMP_SUPPORT)
#pragma omp parallel for schedule(static) shared(progress,status) \
- magick_number_threads(images,complex_images,images->rows,1L)
+ magick_number_threads(Cr_image,complex_images,Cr_image->rows,1L)
#endif
- for (y=0; y < (ssize_t) images->rows; y++)
+ for (y=0; y < (ssize_t) Cr_image->rows; y++)
{
register const Quantum
*magick_restrict Ai,
@@ -245,10 +252,10 @@ MagickExport Image *ComplexImages(const
if (status == MagickFalse)
continue;
- Ar=GetCacheViewVirtualPixels(Ar_view,0,y,Ar_image->columns,1,exception);
- Ai=GetCacheViewVirtualPixels(Ai_view,0,y,Ai_image->columns,1,exception);
- Br=GetCacheViewVirtualPixels(Br_view,0,y,Br_image->columns,1,exception);
- Bi=GetCacheViewVirtualPixels(Bi_view,0,y,Bi_image->columns,1,exception);
+ Ar=GetCacheViewVirtualPixels(Ar_view,0,y,Cr_image->columns,1,exception);
+ Ai=GetCacheViewVirtualPixels(Ai_view,0,y,Cr_image->columns,1,exception);
+ Br=GetCacheViewVirtualPixels(Br_view,0,y,Cr_image->columns,1,exception);
+ Bi=GetCacheViewVirtualPixels(Bi_view,0,y,Cr_image->columns,1,exception);
Cr=QueueCacheViewAuthenticPixels(Cr_view,0,y,Cr_image->columns,1,exception);
Ci=QueueCacheViewAuthenticPixels(Ci_view,0,y,Ci_image->columns,1,exception);
if ((Ar == (const Quantum *) NULL) || (Ai == (const Quantum *) NULL) ||
@@ -258,12 +265,12 @@ MagickExport Image *ComplexImages(const
status=MagickFalse;
continue;
}
- for (x=0; x < (ssize_t) images->columns; x++)
+ for (x=0; x < (ssize_t) Cr_image->columns; x++)
{
register ssize_t
i;
- for (i=0; i < (ssize_t) GetPixelChannels(images); i++)
+ for (i=0; i < (ssize_t) number_channels; i++)
{
switch (op)
{
@@ -285,21 +292,21 @@ MagickExport Image *ComplexImages(const
double
gamma;
- gamma=PerceptibleReciprocal(Br[i]*Br[i]+Bi[i]*Bi[i]+snr);
- Cr[i]=gamma*(Ar[i]*Br[i]+Ai[i]*Bi[i]);
- Ci[i]=gamma*(Ai[i]*Br[i]-Ar[i]*Bi[i]);
+ gamma=PerceptibleReciprocal((double) Br[i]*Br[i]+Bi[i]*Bi[i]+snr);
+ Cr[i]=gamma*((double) Ar[i]*Br[i]+(double) Ai[i]*Bi[i]);
+ Ci[i]=gamma*((double) Ai[i]*Br[i]-(double) Ar[i]*Bi[i]);
break;
}
case MagnitudePhaseComplexOperator:
{
- Cr[i]=sqrt(Ar[i]*Ar[i]+Ai[i]*Ai[i]);
- Ci[i]=atan2(Ai[i],Ar[i])/(2.0*MagickPI)+0.5;
+ Cr[i]=sqrt((double) Ar[i]*Ar[i]+(double) Ai[i]*Ai[i]);
+ Ci[i]=atan2((double) Ai[i],(double) Ar[i])/(2.0*MagickPI)+0.5;
break;
}
case MultiplyComplexOperator:
{
- Cr[i]=QuantumScale*(Ar[i]*Br[i]-Ai[i]*Bi[i]);
- Ci[i]=QuantumScale*(Ai[i]*Br[i]+Ar[i]*Bi[i]);
+ Cr[i]=QuantumScale*((double) Ar[i]*Br[i]-(double) Ai[i]*Bi[i]);
+ Ci[i]=QuantumScale*((double) Ai[i]*Br[i]+(double) Ar[i]*Bi[i]);
break;
}
case RealImaginaryComplexOperator:
Index: ImageMagick-7.0.7-34/coders/gif.c
===================================================================
--- ImageMagick-7.0.7-34.orig/coders/gif.c 2018-05-20 17:55:43.000000000 +0200
+++ ImageMagick-7.0.7-34/coders/gif.c 2019-07-19 14:26:01.333331220 +0200
@@ -673,13 +673,15 @@ static MagickBooleanType EncodeImage(con
/*
Probe hash table.
*/
+ next_pixel=MagickFalse;
+ displacement=1;
index=(Quantum) ((size_t) GetPixelIndex(image,p) & 0xff);
p+=GetPixelChannels(image);
k=(ssize_t) (((size_t) index << (MaxGIFBits-8))+waiting_code);
if (k >= MaxHashTable)
k-=MaxHashTable;
- next_pixel=MagickFalse;
- displacement=1;
+ if (k < 0)
+ continue;
if (hash_code[k] > 0)
{
if ((hash_prefix[k] == waiting_code) &&