Browse Source

improve coverage

pull/1760/head
Ildar Khayrutdinov 4 years ago
parent
commit
6e25e2f87e
  1. 6
      src/ImageSharp/Formats/Tiff/Compression/TiffBaseDecompressor.cs
  2. 5
      src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
  3. 17
      src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong8Array.cs
  4. 23
      tests/ImageSharp.Tests/Formats/Tiff/BigTiffMetadataTests.cs

6
src/ImageSharp/Formats/Tiff/Compression/TiffBaseDecompressor.cs

@ -36,10 +36,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression
/// <param name="buffer">The output buffer for uncompressed data.</param>
public void Decompress(BufferedReadStream stream, ulong stripOffset, ulong stripByteCount, int stripHeight, Span<byte> buffer)
{
if (stripOffset > long.MaxValue || stripByteCount > long.MaxValue)
{
TiffThrowHelper.ThrowImageFormatException("The StripOffset or StripByteCount value is too big.");
}
DebugGuard.MustBeLessThanOrEqualTo(stripOffset, (ulong)long.MaxValue, nameof(stripOffset));
DebugGuard.MustBeLessThanOrEqualTo(stripByteCount, (ulong)long.MaxValue, nameof(stripByteCount));
stream.Seek((long)stripOffset, SeekOrigin.Begin);
this.Decompress(stream, (int)stripByteCount, stripHeight, buffer);

5
src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs

@ -473,10 +473,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
TiffThrowHelper.ThrowImageFormatException("The TIFF image frame is missing the ImageWidth");
}
if (((ulong)width.Value) > int.MaxValue)
{
TiffThrowHelper.ThrowImageFormatException("Too big ImageWidth value");
}
DebugGuard.MustBeLessThanOrEqualTo((ulong)width.Value, (ulong)int.MaxValue, nameof(ExifTag.ImageWidth));
return (int)width.Value;
}

17
src/ImageSharp/Metadata/Profiles/Exif/Values/ExifLong8Array.cs

@ -7,11 +7,6 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
{
internal sealed class ExifLong8Array : ExifArrayValue<ulong>
{
public ExifLong8Array(ExifTag<ulong[]> tag)
: base(tag)
{
}
public ExifLong8Array(ExifTagValue tag)
: base(tag)
{
@ -109,7 +104,13 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
private bool SetArray(long[] values)
{
this.Value = Unsafe.As<long[], ulong[]>(ref values);
var numbers = new ulong[values.Length];
for (int i = 0; i < values.Length; i++)
{
numbers[i] = (ulong)(values[i] < 0 ? 0 : values[i]);
}
this.Value = numbers;
return true;
}
@ -124,7 +125,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
var numbers = new ulong[values.Length];
for (int i = 0; i < values.Length; i++)
{
numbers[i] = (ulong)values[i];
numbers[i] = (ulong)Numerics.Clamp(values[i], 0, int.MaxValue);
}
this.Value = numbers;
@ -148,7 +149,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif
var numbers = new ulong[values.Length];
for (int i = 0; i < values.Length; i++)
{
numbers[i] = (ulong)values[i];
numbers[i] = (ulong)Numerics.Clamp(values[i], 0, short.MaxValue);
}
this.Value = numbers;

23
tests/ImageSharp.Tests/Formats/Tiff/BigTiffMetadataTests.cs

@ -43,9 +43,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.True(long8.TrySetValue(-100L));
Assert.Equal(-100L, long8.GetValue());
Assert.Equal(ExifDataType.SignedLong8, long8.DataType);
Assert.True(long8.TrySetValue(100L));
Assert.Equal(100L, long8.GetValue());
Assert.True(long8.TrySetValue(long.MaxValue));
Assert.Equal(long.MaxValue, long8.GetValue());
Assert.Equal(ExifDataType.SignedLong8, long8.DataType);
}
[Fact]
@ -65,14 +67,25 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.True(long8.TrySetValue(123));
Assert.Equal(new[] { 123UL }, long8.GetValue());
Assert.True(long8.TrySetValue(123u));
Assert.Equal(new[] { 123UL }, long8.GetValue());
Assert.True(long8.TrySetValue(123L));
Assert.Equal(new[] { 123UL }, long8.GetValue());
Assert.True(long8.TrySetValue(123UL));
Assert.Equal(new[] { 123UL }, long8.GetValue());
Assert.True(long8.TrySetValue(new short[] { -1, 2, -3, 4 }));
Assert.Equal(new ulong[] { 0, 2UL, 0, 4UL }, long8.GetValue());
Assert.True(long8.TrySetValue(new[] { 1, 2, 3, 4 }));
Assert.Equal(new[] { 1UL, 2UL, 3UL, 4UL }, long8.GetValue());
Assert.Equal(ExifDataType.Long, long8.DataType);
Assert.True(long8.TrySetValue(new[] { 1, 2, 3, 4, long.MaxValue }));
Assert.Equal(new[] { 1UL, 2UL, 3UL, 4UL, (ulong)long.MaxValue }, long8.GetValue());
Assert.Equal(ExifDataType.Long8, long8.DataType);
}
[Fact]
@ -82,9 +95,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.True(long8.TrySetValue(new[] { 0L }));
Assert.Equal(new[] { 0L }, long8.GetValue());
Assert.Equal(ExifDataType.SignedLong8, long8.DataType);
Assert.True(long8.TrySetValue(new[] { -1L, 2L, -3L, 4L }));
Assert.Equal(new[] { -1L, 2L, -3L, 4L }, long8.GetValue());
Assert.True(long8.TrySetValue(new[] { -1L, 2L, long.MinValue, 4L }));
Assert.Equal(new[] { -1L, 2L, long.MinValue, 4L }, long8.GetValue());
Assert.Equal(ExifDataType.SignedLong8, long8.DataType);
}
}
}

Loading…
Cancel
Save