Skip to content

Commit e20e47f

Browse files
Merge pull request #2887 from SixLabors/js/fix-2859-v4
V4: Gracefully handle LZW overflows
2 parents e925b77 + 29f17eb commit e20e47f

File tree

8 files changed

+222
-132
lines changed

8 files changed

+222
-132
lines changed

src/ImageSharp/Formats/Gif/LzwDecoder.cs

+193-132
Large diffs are not rendered by default.

tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs

+12
Original file line numberDiff line numberDiff line change
@@ -334,4 +334,16 @@ public void IssueTooLargeLzwBits<TPixel>(TestImageProvider<TPixel> provider)
334334
image.DebugSaveMultiFrame(provider);
335335
image.CompareToReferenceOutputMultiFrame(provider, ImageComparer.Exact);
336336
}
337+
338+
// https://github.com/SixLabors/ImageSharp/issues/2859
339+
[Theory]
340+
[WithFile(TestImages.Gif.Issues.Issue2859_A, PixelTypes.Rgba32)]
341+
[WithFile(TestImages.Gif.Issues.Issue2859_B, PixelTypes.Rgba32)]
342+
public void Issue2859_LZWPixelStackOverflow<TPixel>(TestImageProvider<TPixel> provider)
343+
where TPixel : unmanaged, IPixel<TPixel>
344+
{
345+
using Image<TPixel> image = provider.GetImage();
346+
image.DebugSaveMultiFrame(provider);
347+
image.CompareToReferenceOutputMultiFrame(provider, ImageComparer.Exact);
348+
}
337349
}

tests/ImageSharp.Tests/TestImages.cs

+2
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,8 @@ public static class Issues
536536
public const string Issue2450_B = "Gif/issues/issue_2450_2.gif";
537537
public const string Issue2198 = "Gif/issues/issue_2198.gif";
538538
public const string Issue2758 = "Gif/issues/issue_2758.gif";
539+
public const string Issue2859_A = "Gif/issues/issue_2859_A.gif";
540+
public const string Issue2859_B = "Gif/issues/issue_2859_B.gif";
539541
}
540542

541543
public static readonly string[] Animated =
Loading
Loading

0 commit comments

Comments
 (0)