Commit cca607366 for imagemagick.org
commit cca607366fb38c2dde019a9088b8415ffba3a835
Author: Cristy <urban-warrior@imagemagick.org>
Date: Tue Mar 24 11:20:39 2026 -0400
https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-pcvx-ph33-r5vv
diff --git a/MagickCore/resize.c b/MagickCore/resize.c
index ddb6a16cf..29a66c636 100644
--- a/MagickCore/resize.c
+++ b/MagickCore/resize.c
@@ -3929,8 +3929,6 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
sample_offset;
ssize_t
- j,
- *x_offset,
y;
/*
@@ -3974,19 +3972,6 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
sample_offset.y=geometry_info.sigma/100.0-MagickEpsilon;
}
}
- /*
- Allocate scan line buffer and column offset buffers.
- */
- x_offset=(ssize_t *) AcquireQuantumMemory((size_t) sample_image->columns,
- sizeof(*x_offset));
- if (x_offset == (ssize_t *) NULL)
- {
- sample_image=DestroyImage(sample_image);
- ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
- }
- for (j=0; j < (ssize_t) sample_image->columns; j++)
- x_offset[j]=(ssize_t) ((((double) j+sample_offset.x)*image->columns)/
- sample_image->columns);
/*
Sample each row.
*/
@@ -4000,25 +3985,17 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
#endif
for (y=0; y < (ssize_t) sample_image->rows; y++)
{
- const Quantum
- *magick_restrict p;
-
Quantum
*magick_restrict q;
ssize_t
- x,
- y_offset;
+ x;
if (status == MagickFalse)
continue;
- y_offset=(ssize_t) ((((double) y+sample_offset.y)*image->rows)/
- sample_image->rows);
- p=GetCacheViewVirtualPixels(image_view,0,y_offset,image->columns,1,
- exception);
q=QueueCacheViewAuthenticPixels(sample_view,0,y,sample_image->columns,1,
exception);
- if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL))
+ if (q == (Quantum *) NULL)
{
status=MagickFalse;
continue;
@@ -4028,14 +4005,29 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
*/
for (x=0; x < (ssize_t) sample_image->columns; x++)
{
+ const Quantum
+ *magick_restrict p;
+
ssize_t
- i;
+ i,
+ x_offset,
+ y_offset;
if (GetPixelWriteMask(sample_image,q) <= (QuantumRange/2))
{
q+=(ptrdiff_t) GetPixelChannels(sample_image);
continue;
}
+ x_offset=(ssize_t) ((((double) x+sample_offset.x)*image->columns)/
+ sample_image->columns);
+ y_offset=(ssize_t) ((((double) y+sample_offset.y)*image->rows)/
+ sample_image->rows);
+ p=GetCacheViewVirtualPixels(image_view,x_offset,y_offset,1,1,exception);
+ if (p == (const Quantum *) NULL)
+ {
+ status=MagickFalse;
+ break;
+ }
for (i=0; i < (ssize_t) GetPixelChannels(sample_image); i++)
{
PixelChannel
@@ -4051,8 +4043,7 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
if ((traits == UndefinedPixelTrait) ||
(image_traits == UndefinedPixelTrait))
continue;
- SetPixelChannel(sample_image,channel,p[x_offset[x]*(ssize_t)
- GetPixelChannels(image)+i],q);
+ SetPixelChannel(sample_image,channel,p[i],q);
}
q+=(ptrdiff_t) GetPixelChannels(sample_image);
}
@@ -4070,7 +4061,6 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns,
}
image_view=DestroyCacheView(image_view);
sample_view=DestroyCacheView(sample_view);
- x_offset=(ssize_t *) RelinquishMagickMemory(x_offset);
sample_image->type=image->type;
if (status == MagickFalse)
sample_image=DestroyImage(sample_image);