From ed1a0631f0c83ae375865b63c0cfebe2238abe09 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 + .../Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg | Bin 0 -> 18329 bytes 4 files changed, 16 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 0000000000000000000000000000000000000000..d60013dcd990b5cf53d842d94e2d15f2a296c288 GIT binary patch literal 18329 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