diff --git a/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs b/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs index 58f32bdd8..6164bd228 100644 --- a/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs +++ b/src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs @@ -73,6 +73,8 @@ namespace ImageSharp /// public Collection Read(byte[] data) { + DebugGuard.NotNull(data, nameof(data)); + Collection result = new Collection(); this.exifData = data; @@ -390,7 +392,13 @@ namespace ImageSharp private string GetString(uint length) { - return ToString(this.GetBytes(length)); + byte[] data = this.GetBytes(length); + if (data == null || data.Length == 0) + { + return null; + } + + return ToString(data); } private void GetThumbnail(uint offset) diff --git a/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifReaderTests.cs b/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifReaderTests.cs new file mode 100644 index 000000000..dc62f1cbf --- /dev/null +++ b/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifReaderTests.cs @@ -0,0 +1,35 @@ +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageSharp.Tests +{ + using System.Collections.ObjectModel; + using Xunit; + + public class ExifReaderTests + { + [Fact] + public void Read_DataIsEmpty_ReturnsEmptyCollection() + { + ExifReader reader = new ExifReader(); + byte[] data = new byte[] { }; + + Collection result = reader.Read(data); + + Assert.Equal(0, result.Count); + } + + [Fact] + public void Read_DataIsMinimal_ReturnsEmptyCollection() + { + ExifReader reader = new ExifReader(); + byte[] data = new byte[] { 69, 120, 105, 102, 0, 0 }; + + Collection result = reader.Read(data); + + Assert.Equal(0, result.Count); + } + } +}