Commit 9b1840d26 for imagemagick.org
commit 9b1840d2688603bb559eaa4b29f657504c8a6b62
Author: Cristy <urban-warrior@imagemagick.org>
Date: Sat Mar 14 20:15:19 2026 -0400
correct kernel width casting
diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c
index 77fc3cdf8..ea26261dd 100644
--- a/MagickCore/morphology.c
+++ b/MagickCore/morphology.c
@@ -100,9 +100,9 @@ static inline size_t fact(size_t n)
return(f);
}
#elif 1 /* glibc floating point alternatives */
-#define fact(n) (CastDoubleToSizeT(tgamma((double)n+1.0))
+#define fact(n) (CastDoubleToSizeT(tgamma((double) n+1)))
#else
-#define fact(n) (CastDoubleToSizeTlgamma((double)n+1.0))
+#define fact(n) (CastDoubleToSizeT(lgamma((double) n+1)))
#endif
@@ -306,7 +306,7 @@ static KernelInfo *ParseKernelArray(const char *kernel_string)
(void) GetNextToken(p,&p,MagickPathExtent,token);
}
/* set the size of the kernel - old sized square */
- kernel->width = kernel->height= CastDoubleToSizeT(sqrt((double) i+1.0));
+ kernel->width = kernel->height=CastDoubleToSizeT(sqrt((double) i+1.0));
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
p=(const char *) kernel_string;
while ((isspace((int) ((unsigned char) *p)) != 0) || (*p == '\''))
@@ -1059,7 +1059,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
A, B, R;
if ( args->rho >= 1.0 )
- kernel->width = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = CastDoubleToSizeT(args->rho)*2+1;
else if ( (type != DoGKernel) || (sigma >= sigma2) )
kernel->width = GetOptimalKernelWidth2D(args->rho,sigma);
else
@@ -1151,7 +1151,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
alpha, beta;
if ( args->rho >= 1.0 )
- kernel->width = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = CastDoubleToSizeT(args->rho)*2+1;
else
kernel->width = GetOptimalKernelWidth1D(args->rho,sigma);
kernel->height = 1;
@@ -1310,7 +1310,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 3; /* default radius = 1 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
order_f = fact(kernel->width-1);
@@ -1547,7 +1547,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 3; /* default radius = 1 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -1575,7 +1575,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 3; /* default radius = 1 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2+1);
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
scale = args->sigma;
}
@@ -1611,7 +1611,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 5; /* default radius = 2 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -1633,12 +1633,12 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
case DiskKernel:
{
ssize_t
- limit = CastDoubleToSsizeT(args->rho*args->rho);
+ limit = (ssize_t)(args->rho*args->rho);
if (args->rho < 0.4) /* default radius approx 4.3 */
kernel->width = kernel->height = 9L, limit = 18L;
else
- kernel->width = kernel->height = CastDoubleToSizeT(fabs(args->rho)*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(fabs(args->rho))*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -1661,7 +1661,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 5; /* default radius 2 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -1683,7 +1683,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 5; /* default radius 2 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -1713,15 +1713,15 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < args->sigma)
{
- kernel->width = CastDoubleToSizeT(args->sigma*2.0+1.0);
- limit1 = CastDoubleToSsizeT(args->rho*args->rho);
- limit2 = CastDoubleToSsizeT(args->sigma*args->sigma);
+ kernel->width = CastDoubleToSizeT(args->sigma)*2+1;
+ limit1 = (ssize_t)(args->rho*args->rho);
+ limit2 = (ssize_t)(args->sigma*args->sigma);
}
else
{
- kernel->width = CastDoubleToSizeT(args->rho*2.0+1.0);
- limit1 = CastDoubleToSsizeT(args->sigma*args->sigma);
- limit2 = CastDoubleToSsizeT(args->rho*args->rho);
+ kernel->width = CastDoubleToSizeT(args->rho)*2+1;
+ limit1 = (ssize_t)(args->sigma*args->sigma);
+ limit2 = (ssize_t)(args->rho*args->rho);
}
if ( limit2 <= 0 )
kernel->width = 7L, limit1 = 7L, limit2 = 11L;
@@ -2100,7 +2100,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 3; /* default radius = 1 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -2121,7 +2121,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 3; /* default radius = 1 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -2142,7 +2142,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 2.0)
kernel->width = kernel->height = 5; /* default/minimum radius = 2 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(
@@ -2168,7 +2168,7 @@ MagickExport KernelInfo *AcquireKernelBuiltIn(const KernelInfoType type,
if (args->rho < 1.0)
kernel->width = kernel->height = 3; /* default radius = 1 */
else
- kernel->width = kernel->height = CastDoubleToSizeT(args->rho*2.0+1.0);
+ kernel->width = kernel->height = CastDoubleToSizeT(args->rho)*2+1;
kernel->x = kernel->y = (ssize_t) (kernel->width-1)/2;
kernel->values=(MagickRealType *) MagickAssumeAligned(