diff options
author | Cristy <urban-warrior@imagemagick.org> | 2019-06-22 09:04:18 -0400 |
---|---|---|
committer | Cristy <urban-warrior@imagemagick.org> | 2019-06-22 09:04:18 -0400 |
commit | 0726f905bb464d653f48b6e59f1022951d6e88cd (patch) | |
tree | 3872af6f2a34fc13accfa1160cdfd179f59fd31f /MagickCore/statistic.c | |
parent | 025e77fcb2f45b21689931ba3bf74eac153afa48 (diff) | |
download | ImageMagick-0726f905bb464d653f48b6e59f1022951d6e88cd.tar.gz |
...
Diffstat (limited to 'MagickCore/statistic.c')
-rw-r--r-- | MagickCore/statistic.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c index b5ed38c61..f533f9607 100644 --- a/MagickCore/statistic.c +++ b/MagickCore/statistic.c @@ -137,13 +137,19 @@ typedef struct _PixelChannels channel[CompositePixelChannel]; } PixelChannels; -static PixelChannels **DestroyPixelThreadSet(PixelChannels **pixels) +static PixelChannels **DestroyPixelThreadSet(const Image *images, + PixelChannels **pixels) { register ssize_t i; + size_t + rows; + assert(pixels != (PixelChannels **) NULL); - for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) + rows=MagickMax(GetImageListLength(images), + (size_t) GetMagickResourceLimit(ThreadResource)); + for (i=0; i < (ssize_t) rows; i++) if (pixels[i] != (PixelChannels *) NULL) pixels[i]=(PixelChannels *) RelinquishMagickMemory(pixels[i]); pixels=(PixelChannels **) RelinquishMagickMemory(pixels); @@ -170,6 +176,7 @@ static PixelChannels **AcquirePixelThreadSet(const Image *images) pixels=(PixelChannels **) AcquireQuantumMemory(rows,sizeof(*pixels)); if (pixels == (PixelChannels **) NULL) return((PixelChannels **) NULL); + (void) memset(pixels,0,rows*sizeof(*pixels)); columns=MaxPixelChannels; for (next=images; next != (Image *) NULL; next=next->next) columns=MagickMax(next->columns,columns); @@ -180,7 +187,7 @@ static PixelChannels **AcquirePixelThreadSet(const Image *images) pixels[i]=(PixelChannels *) AcquireQuantumMemory(columns,sizeof(**pixels)); if (pixels[i] == (PixelChannels *) NULL) - return(DestroyPixelThreadSet(pixels)); + return(DestroyPixelThreadSet(images,pixels)); for (j=0; j < (ssize_t) columns; j++) { register ssize_t @@ -767,7 +774,7 @@ MagickExport Image *EvaluateImages(const Image *images, } } evaluate_view=DestroyCacheView(evaluate_view); - evaluate_pixels=DestroyPixelThreadSet(evaluate_pixels); + evaluate_pixels=DestroyPixelThreadSet(images,evaluate_pixels); random_info=DestroyRandomInfoThreadSet(random_info); if (status == MagickFalse) image=DestroyImage(image); @@ -2348,7 +2355,7 @@ MagickExport Image *PolynomialImage(const Image *images, } } polynomial_view=DestroyCacheView(polynomial_view); - polynomial_pixels=DestroyPixelThreadSet(polynomial_pixels); + polynomial_pixels=DestroyPixelThreadSet(images,polynomial_pixels); if (status == MagickFalse) image=DestroyImage(image); return(image); |