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); + } } }