diff --git a/src/ImageSharp/Formats/Webp/WebpDecoderCore.cs b/src/ImageSharp/Formats/Webp/WebpDecoderCore.cs
index 91594a6740..9e709236c3 100644
--- a/src/ImageSharp/Formats/Webp/WebpDecoderCore.cs
+++ b/src/ImageSharp/Formats/Webp/WebpDecoderCore.cs
@@ -465,22 +465,18 @@ namespace SixLabors.ImageSharp.Formats.Webp
/// The webp image features.
private void ParseOptionalExtendedChunks(WebpChunkType chunkType, WebpFeatures features)
{
- int bytesRead;
switch (chunkType)
{
case WebpChunkType.Iccp:
this.ReadIccProfile();
-
break;
case WebpChunkType.Exif:
this.ReadExifProfile();
-
break;
case WebpChunkType.Xmp:
this.ReadXmpProfile();
-
break;
case WebpChunkType.Animation:
@@ -492,7 +488,7 @@ namespace SixLabors.ImageSharp.Formats.Webp
features.AlphaChunkHeader = (byte)this.currentStream.ReadByte();
int alphaDataSize = (int)(alphaChunkSize - 1);
features.AlphaData = this.memoryAllocator.Allocate(alphaDataSize);
- bytesRead = this.currentStream.Read(features.AlphaData.Memory.Span, 0, alphaDataSize);
+ int bytesRead = this.currentStream.Read(features.AlphaData.Memory.Span, 0, alphaDataSize);
if (bytesRead != alphaDataSize)
{
WebpThrowHelper.ThrowInvalidImageContentException("Not enough data to read the alpha chunk");
@@ -556,7 +552,8 @@ namespace SixLabors.ImageSharp.Formats.Webp
int bytesRead = this.currentStream.Read(exifData, 0, (int)exifChunkSize);
if (bytesRead != exifChunkSize)
{
- WebpThrowHelper.ThrowInvalidImageContentException("Not enough data to read the exif chunk");
+ // Ignore invalid chunk.
+ return;
}
var profile = new ExifProfile(exifData);
@@ -580,7 +577,8 @@ namespace SixLabors.ImageSharp.Formats.Webp
int bytesRead = this.currentStream.Read(xmpData, 0, (int)xmpChunkSize);
if (bytesRead != xmpChunkSize)
{
- WebpThrowHelper.ThrowInvalidImageContentException("Not enough data to read the xmp chunk");
+ // Ignore invalid chunk.
+ return;
}
var profile = new XmpProfile(xmpData);
diff --git a/tests/ImageSharp.Tests/Formats/WebP/WebpMetaDataTests.cs b/tests/ImageSharp.Tests/Formats/WebP/WebpMetaDataTests.cs
index 499b0579b6..456b9a3f52 100644
--- a/tests/ImageSharp.Tests/Formats/WebP/WebpMetaDataTests.cs
+++ b/tests/ImageSharp.Tests/Formats/WebP/WebpMetaDataTests.cs
@@ -1,6 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
+using System;
using System.IO;
using System.Threading.Tasks;
using SixLabors.ImageSharp.Formats.Webp;
@@ -153,14 +154,14 @@ namespace SixLabors.ImageSharp.Tests.Formats.Webp
[Theory]
[WithFile(TestImages.Webp.Lossy.WithExifNotEnoughData, PixelTypes.Rgba32)]
- public void WebpDecoder_ThrowInvalidImageContentException_OnWithInvalidExifData(TestImageProvider provider)
- where TPixel : unmanaged, IPixel =>
- Assert.Throws(
- () =>
- {
- using (provider.GetImage(WebpDecoder))
- {
- }
- });
+ public void WebpDecoder_IgnoresInvalidExifChunk(TestImageProvider provider)
+ where TPixel : unmanaged, IPixel
+ {
+ Exception ex = Record.Exception(() =>
+ {
+ using Image image = provider.GetImage();
+ });
+ Assert.Null(ex);
+ }
}
}