Commit fd4c374db for imagemagick.org

commit fd4c374db74a7348387e15b16e8a0082654fe933
Author: Dirk Lemstra <dirk@lemstra.org>
Date:   Thu Nov 12 22:46:07 2026 +0100

    Added extra checks to prevent an infinite loop when using -rotational-blur (GHSA-h5qr-j3rh-p38h)

diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 40c54a9f0..eada3d56b 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -3203,7 +3203,7 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle,
   blur_center.x=(double) (image->columns-1)/2.0;
   blur_center.y=(double) (image->rows-1)/2.0;
   blur_radius=hypot(blur_center.x,blur_center.y);
-  n=(size_t) fabs(4.0*DegreesToRadians(angle)*sqrt((double) blur_radius)+2UL);
+  n=(size_t) fabs(4.0*DegreesToRadians(angle)*sqrt((double) blur_radius))+2UL;
   theta=DegreesToRadians(angle)/(double) (n-1);
   cos_theta=(double *) AcquireQuantumMemory((size_t) n,sizeof(*cos_theta));
   sin_theta=(double *) AcquireQuantumMemory((size_t) n,sizeof(*sin_theta));
@@ -3277,11 +3277,10 @@ MagickExport Image *RotationalBlurImage(const Image *image,const double angle,
       else
         {
           step=(size_t) (blur_radius/radius);
+          if (step >= n)
+            step=n-1;
           if (step == 0)
             step=1;
-          else
-            if (step >= n)
-              step=n-1;
         }
       for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
       {