File ImageMagick-CVE-2020-25676.patch of Package ImageMagick.29977

Index: ImageMagick-6.8.8-1/magick/pixel.c
===================================================================
--- ImageMagick-6.8.8-1.orig/magick/pixel.c	2013-12-01 15:47:50.000000000 +0100
+++ ImageMagick-6.8.8-1/magick/pixel.c	2020-12-04 11:03:37.839006142 +0100
@@ -4213,6 +4213,15 @@ static inline void CatromWeights(const M
   (*weights)[2]=x-(*weights)[3]-gamma;
 }
 
+static inline double ConstrainPixelOffset(double x)
+{
+  if (x < (double) -(SSIZE_MAX-512))
+    return((double) -(SSIZE_MAX-512));
+  if (x > (double) (SSIZE_MAX-512))
+    return((double) (SSIZE_MAX-512));
+  return(x);
+}
+
 static inline void SplineWeights(const MagickRealType x,
   MagickRealType (*weights)[4])
 {
@@ -4278,8 +4287,8 @@ MagickExport MagickBooleanType Interpola
   assert(image->signature == MagickSignature);
   assert(image_view != (CacheView *) NULL);
   status=MagickTrue;
-  x_offset=(ssize_t) floor(x);
-  y_offset=(ssize_t) floor(y);
+  x_offset=(ssize_t) floor(ConstrainPixelOffset(x));
+  y_offset=(ssize_t) floor(ConstrainPixelOffset(y));
   interpolate = method;
   if ( interpolate == UndefinedInterpolatePixel )
     interpolate = image->interpolate;
@@ -4296,8 +4305,8 @@ MagickExport MagickBooleanType Interpola
       if (interpolate == Average9InterpolatePixel)
         {
           count=3;
-          x_offset=(ssize_t) (floor(x+0.5)-1);
-          y_offset=(ssize_t) (floor(y+0.5)-1);
+          x_offset=(ssize_t) (floor(ConstrainPixelOffset(x)+0.5)-1);
+          y_offset=(ssize_t) (floor(ConstrainPixelOffset(y)+0.5)-1);
         }
       else
         if (interpolate == Average16InterpolatePixel)
openSUSE Build Service is sponsored by