From 11658ac60462e844082a8a8f8f2f7f9aa55e880f Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 15 Apr 2020 18:26:40 +0200 Subject: [PATCH] Add testcase for app13 marker with empty IPTC --- src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 9 ++++++--- .../Metadata/Profiles/IPTC/IptcProfileTests.cs | 9 +++++++++ tests/ImageSharp.Tests/TestImages.cs | 1 + .../Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg | 3 +++ 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 896f41aaed..93cdd18c31 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -644,9 +644,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { var resourceBlockNameLength = ReadImageResourceNameLength(blockDataSpan); var resourceDataSize = ReadResourceDataLength(blockDataSpan, resourceBlockNameLength); - this.isIptc = true; - this.iptcData = blockDataSpan.Slice(2 + resourceBlockNameLength + 4, resourceDataSize).ToArray(); - break; + if (resourceDataSize > 0) + { + this.isIptc = true; + this.iptcData = blockDataSpan.Slice(2 + resourceBlockNameLength + 4, resourceDataSize).ToArray(); + break; + } } else { diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 40dd76836f..914690102a 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -45,6 +45,15 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC } } + [Theory] + [WithFile(TestImages.Jpeg.Baseline.App13WithEmptyIptc, PixelTypes.Rgba32)] + public void ReadApp13_WithEmptyIptc_Works(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + using Image image = provider.GetImage(JpegDecoder); + Assert.Null(image.Metadata.IptcProfile); + } + [Fact] public void IptcProfile_ToAndFromByteArray_Works() { diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index d006c6682a..65d9752573 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -163,6 +163,7 @@ namespace SixLabors.ImageSharp.Tests public const string Testorig12bit = "Jpg/baseline/testorig12.jpg"; public const string YcckSubsample1222 = "Jpg/baseline/ycck-subsample-1222.jpg"; public const string Iptc = "Jpg/baseline/iptc.jpg"; + public const string App13WithEmptyIptc = "Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg"; public static readonly string[] All = { diff --git a/tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg b/tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg new file mode 100644 index 0000000000..9300dced9a --- /dev/null +++ b/tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7508a28e39026ed8ebc9751138d014450b2f636a343838d8e08dbc7e19ad6df +size 18329