Commit 48c6d9597 for imagemagick.org
commit 48c6d9597177a3d08a3c5bd43ac8852f089e99e8
Author: Dirk Lemstra <dirk@lemstra.org>
Date: Tue Aug 4 22:05:07 2026 +0200
Return error when WebPDemuxGetFrame fails.
diff --git a/coders/webp.c b/coders/webp.c
index 6fae4045c..9f55ba24c 100644
--- a/coders/webp.c
+++ b/coders/webp.c
@@ -454,49 +454,51 @@ static int ReadAnimatedWEBPImage(const ImageInfo *image_info,Image *image,
WebPMuxDelete(mux);
}
demux=WebPDemux(&data);
- if (WebPDemuxGetFrame(demux,1,&iter))
+ if (!WebPDemuxGetFrame(demux,1,&iter))
{
- do
+ WebPDemuxDelete(demux);
+ return(VP8_STATUS_NOT_ENOUGH_DATA);
+ }
+ do
+ {
+ if (image_count != 0)
{
- if (image_count != 0)
- {
- AcquireNextImage(image_info,image,exception);
- if (GetNextImageInList(image) == (Image *) NULL)
- break;
- image=SyncNextImageInList(image);
- CloneImageProperties(image,original_image);
- image->page.x=(ssize_t) iter.x_offset;
- image->page.y=(ssize_t) iter.y_offset;
- webp_status=ReadSingleWEBPImage(image_info,image,
- iter.fragment.bytes,iter.fragment.size,configure,exception,
- MagickFalse);
- }
- else
- {
- image->page.x=(ssize_t) iter.x_offset;
- image->page.y=(ssize_t) iter.y_offset;
- webp_status=ReadSingleWEBPImage(image_info,image,
- iter.fragment.bytes,iter.fragment.size,configure,exception,
- MagickTrue);
- }
- if (webp_status != VP8_STATUS_OK)
+ AcquireNextImage(image_info,image,exception);
+ if (GetNextImageInList(image) == (Image *) NULL)
break;
- image->page.width=canvas_width;
- image->page.height=canvas_height;
- image->ticks_per_second=100;
- image->delay=(size_t) round(iter.duration/10.0);
- image->dispose=NoneDispose;
- if (iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND)
- image->dispose=BackgroundDispose;
- (void) SetImageProperty(image,"webp:mux-blend",
- "AtopPreviousAlphaBlend",exception);
- if (iter.blend_method == WEBP_MUX_BLEND)
- (void) SetImageProperty(image,"webp:mux-blend",
- "AtopBackgroundAlphaBlend",exception);
- image_count++;
- } while (WebPDemuxNextFrame(&iter));
- WebPDemuxReleaseIterator(&iter);
- }
+ image=SyncNextImageInList(image);
+ CloneImageProperties(image,original_image);
+ image->page.x=(ssize_t) iter.x_offset;
+ image->page.y=(ssize_t) iter.y_offset;
+ webp_status=ReadSingleWEBPImage(image_info,image,
+ iter.fragment.bytes,iter.fragment.size,configure,exception,
+ MagickFalse);
+ }
+ else
+ {
+ image->page.x=(ssize_t) iter.x_offset;
+ image->page.y=(ssize_t) iter.y_offset;
+ webp_status=ReadSingleWEBPImage(image_info,image,
+ iter.fragment.bytes,iter.fragment.size,configure,exception,
+ MagickTrue);
+ }
+ if (webp_status != VP8_STATUS_OK)
+ break;
+ image->page.width=canvas_width;
+ image->page.height=canvas_height;
+ image->ticks_per_second=100;
+ image->delay=(size_t) round(iter.duration/10.0);
+ image->dispose=NoneDispose;
+ if (iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND)
+ image->dispose=BackgroundDispose;
+ (void) SetImageProperty(image,"webp:mux-blend",
+ "AtopPreviousAlphaBlend",exception);
+ if (iter.blend_method == WEBP_MUX_BLEND)
+ (void) SetImageProperty(image,"webp:mux-blend",
+ "AtopBackgroundAlphaBlend",exception);
+ image_count++;
+ } while (WebPDemuxNextFrame(&iter));
+ WebPDemuxReleaseIterator(&iter);
WebPDemuxDelete(demux);
return(webp_status);
}
@@ -559,7 +561,7 @@ static Image *ReadWEBPImage(const ImageInfo *image_info,
}
stream=(unsigned char *) NULL;
if (WebPInitDecoderConfig(&configure) == 0)
- ThrowReaderException(ResourceLimitError,"UnableToDecodeImageFile");
+ ThrowWEBPException(ResourceLimitError,"UnableToDecodeImageFile");
webp_image->colorspace=MODE_RGBA;
count=ReadBlob(image,12,header);
if (count != 12)