Browse Source

Issue #132: Handle undefined EXIF data type where no number of components set

pull/171/head
Steffen Habermehl 9 years ago
committed by Dirk Lemstra
parent
commit
2c373a623b
  1. 7
      src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs
  2. 22
      tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs
  3. 1
      tests/ImageSharp.Tests/TestImages.cs
  4. BIN
      tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/ExifUndefType.jpg

7
src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs

@ -319,6 +319,13 @@ namespace ImageSharp
uint numberOfComponents = this.GetLong();
// Issue #132: ExifDataType == Undefined is treated like a byte array.
// If numberOfComponents == 0 this value can only be handled as an inline value and must fallback to 4 (bytes)
if (dataType == ExifDataType.Undefined && numberOfComponents == 0)
{
numberOfComponents = 4;
}
uint size = numberOfComponents * ExifValue.GetSize(dataType);
byte[] data = this.GetBytes(4);

22
tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs

@ -7,9 +7,11 @@ namespace ImageSharp.Tests
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using ImageSharp.Processing;
using Xunit;
public class ExifProfileTests
@ -268,6 +270,26 @@ namespace ImageSharp.Tests
}
}
[Fact]
public void ExifTypeUndefined()
{
Image image = TestFile.Create(TestImages.Jpeg.Baseline.Bad.ExifUndefType).CreateImage();
Assert.NotNull(image);
ExifProfile profile = image.MetaData.ExifProfile;
Assert.NotNull(profile);
IEnumerator<ExifValue> enumerator = profile.Values.GetEnumerator();
while (enumerator.MoveNext())
{
ExifValue entry = enumerator.Current;
if (entry.DataType == ExifDataType.Undefined)
{
Assert.NotEqual(0, entry.NumberOfComponents);
}
}
}
private static ExifProfile GetExifProfile()
{
Image image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateImage();

1
tests/ImageSharp.Tests/TestImages.cs

@ -61,6 +61,7 @@ namespace ImageSharp.Tests
public static class Bad
{
public const string MissingEOF = "Jpg/baseline/badeof.jpg";
public const string ExifUndefType = "Jpg/baseline/ExifUndefType.jpg";
}
public const string Cmyk = "Jpg/baseline/cmyk.jpg";

BIN
tests/ImageSharp.Tests/TestImages/Formats/Jpg/baseline/ExifUndefType.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Loading…
Cancel
Save