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)