From f11fc034d2270a51940f3e02412a089c2a5f69a7 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 31 Aug 2017 01:30:52 +0200 Subject: [PATCH] fixed #214 --- .../Components/Decoder/InputProcessor.cs | 2 +- .../Formats/Jpg/JpegDecoderTests.cs | 16 ++++++++++++++-- tests/ImageSharp.Tests/TestImages.cs | 7 +++++++ .../Input/Jpg/issues/Issue214-CriticalEOF .jpg | Bin 0 -> 35601 bytes 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 tests/Images/Input/Jpg/issues/Issue214-CriticalEOF .jpg diff --git a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs index 6426afd49..a3967c739 100644 --- a/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs +++ b/src/ImageSharp/Formats/Jpeg/GolangPort/Components/Decoder/InputProcessor.cs @@ -151,7 +151,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort.Components.Decoder } OrigDecoderErrorCode errorCode = OrigDecoderErrorCode.NoError; - while (length > 0) + while (length > 0 && errorCode == OrigDecoderErrorCode.NoError) { if (this.Bytes.J - this.Bytes.I >= length) { diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs index 9247a1fdc..5f0b08ed1 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs @@ -4,6 +4,9 @@ // ReSharper disable InconsistentNaming + +using System; + namespace SixLabors.ImageSharp.Tests.Formats.Jpg { using System.IO; @@ -33,7 +36,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg TestImages.Jpeg.Baseline.Jpeg420Small, TestImages.Jpeg.Baseline.Jpeg444, TestImages.Jpeg.Baseline.Bad.BadEOF, - TestImages.Jpeg.Baseline.Bad.ExifUndefType, + TestImages.Jpeg.Baseline.Bad.ExifUndefType }; public static string[] ProgressiveTestJpegs = @@ -117,7 +120,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg image.CompareToReferenceOutput(provider, VeryTolerantJpegComparer, appendPixelTypeToFileName: false); } } - + [Theory] [WithFileCollection(nameof(BaselineTestJpegs), PixelTypes.Rgba32)] public void DecodeBaselineJpeg_Orig(TestImageProvider provider) @@ -132,6 +135,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg } } + [Theory] + [WithFile(TestImages.Jpeg.Issues.Issue214CriticalEOF, PixelTypes.Rgba32)] + public void DecodeBaselineJpeg_CriticalEOF_ShouldThrow_Orig(TestImageProvider provider) + where TPixel : struct, IPixel + { + // TODO: We need a public ImageDecoderException class in ImageSharp! + Assert.ThrowsAny(() => provider.GetImage(OrigJpegDecoder)); + } + public const string DecodeProgressiveJpegOutputName = "DecodeProgressiveJpeg"; [Theory] diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 252eab483..c36f02259 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -112,6 +112,13 @@ namespace SixLabors.ImageSharp.Tests }; } + public class Issues + { + public const string Issue214CriticalEOF = "Jpg/issues/Issue214-CriticalEOF .jpg"; + public const string Issue159Girl = "Jpg/issues/Issue159Girl.jpg"; + public const string Issue178Lemon = "Jpg/issues/Issue178.jpg"; + } + public static readonly string[] All = Baseline.All.Concat(Progressive.All).ToArray(); } diff --git a/tests/Images/Input/Jpg/issues/Issue214-CriticalEOF .jpg b/tests/Images/Input/Jpg/issues/Issue214-CriticalEOF .jpg new file mode 100644 index 0000000000000000000000000000000000000000..84b22c9da7d616311563e503c89b5bbd81e2972b GIT binary patch literal 35601 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 Pl37E?DoZ>nL_t6Rx8uug literal 0 HcmV?d00001