Browse Source
Merge pull request #2676 from SixLabors/js/fix-2670
Fix AccessViolationException and hard crash with animated webp
pull/2681/head
James Jackson-South
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with
18 additions and
6 deletions
-
src/ImageSharp/Formats/Webp/AlphaDecoder.cs
-
tests/ImageSharp.Tests/Formats/WebP/WebpDecoderTests.cs
-
tests/ImageSharp.Tests/TestImages.cs
-
tests/Images/Input/Webp/issues/Issue2670.webp
|
|
|
@ -311,18 +311,15 @@ internal class AlphaDecoder : IDisposable |
|
|
|
|
|
|
|
private static void HorizontalUnfilter(Span<byte> prev, Span<byte> input, Span<byte> dst, int width) |
|
|
|
{ |
|
|
|
if (Sse2.IsSupported) |
|
|
|
// TODO: Investigate AdvSimd support for this method.
|
|
|
|
if (Sse2.IsSupported && width >= 9) |
|
|
|
{ |
|
|
|
dst[0] = (byte)(input[0] + (prev.IsEmpty ? 0 : prev[0])); |
|
|
|
if (width <= 1) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
nuint i; |
|
|
|
Vector128<int> last = Vector128<int>.Zero.WithElement(0, dst[0]); |
|
|
|
ref byte srcRef = ref MemoryMarshal.GetReference(input); |
|
|
|
ref byte dstRef = ref MemoryMarshal.GetReference(dst); |
|
|
|
|
|
|
|
for (i = 1; i <= (uint)width - 8; i += 8) |
|
|
|
{ |
|
|
|
Vector128<long> a0 = Vector128.Create(Unsafe.As<byte, long>(ref Unsafe.Add(ref srcRef, i)), 0); |
|
|
|
|
|
|
|
@ -439,6 +439,17 @@ public class WebpDecoderTests |
|
|
|
image.CompareToOriginal(provider, ReferenceDecoder); |
|
|
|
} |
|
|
|
|
|
|
|
// https://github.com/SixLabors/ImageSharp/issues/2670
|
|
|
|
[Theory] |
|
|
|
[WithFile(Lossy.Issue2670, PixelTypes.Rgba32)] |
|
|
|
public void WebpDecoder_CanDecode_Issue2670<TPixel>(TestImageProvider<TPixel> provider) |
|
|
|
where TPixel : unmanaged, IPixel<TPixel> |
|
|
|
{ |
|
|
|
using Image<TPixel> image = provider.GetImage(WebpDecoder.Instance); |
|
|
|
image.DebugSave(provider); |
|
|
|
image.CompareToOriginal(provider, ReferenceDecoder); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[WithFile(Lossless.LossLessCorruptImage3, PixelTypes.Rgba32)] |
|
|
|
public void WebpDecoder_ThrowImageFormatException_OnInvalidImages<TPixel>(TestImageProvider<TPixel> provider) |
|
|
|
|
|
|
|
@ -804,6 +804,7 @@ public static class TestImages |
|
|
|
public const string Issue1594 = "Webp/issues/Issue1594.webp"; |
|
|
|
public const string Issue2243 = "Webp/issues/Issue2243.webp"; |
|
|
|
public const string Issue2257 = "Webp/issues/Issue2257.webp"; |
|
|
|
public const string Issue2670 = "Webp/issues/Issue2670.webp"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -0,0 +1,3 @@ |
|
|
|
version https://git-lfs.github.com/spec/v1 |
|
|
|
oid sha256:23ad5eb449f693af68e51dd108a6b9847a8eb48b82ca5b848395a54c2e0be08f |
|
|
|
size 152 |