Browse Source

Don't throw when Position is out of range for BufferedReadStream

pull/1918/head
Ynse Hoornenborg 4 years ago
parent
commit
559edde971
  1. 1
      src/ImageSharp/IO/BufferedReadStream.cs
  2. 24
      tests/ImageSharp.Tests/IO/BufferedReadStreamTests.cs

1
src/ImageSharp/IO/BufferedReadStream.cs

@ -87,7 +87,6 @@ namespace SixLabors.ImageSharp.IO
set
{
Guard.MustBeGreaterThanOrEqualTo(value, 0, nameof(this.Position));
Guard.MustBeLessThanOrEqualTo(value, this.Length, nameof(this.Position));
// Only reset readBufferIndex if we are out of bounds of our working buffer
// otherwise we should simply move the value by the diff.

24
tests/ImageSharp.Tests/IO/BufferedReadStreamTests.cs

@ -314,7 +314,7 @@ namespace SixLabors.ImageSharp.Tests.IO
[Theory]
[MemberData(nameof(BufferSizes))]
public void BufferedStreamThrowsOnBadPosition(int bufferSize)
public void BufferedStreamThrowsOnNegativePosition(int bufferSize)
{
this.configuration.StreamProcessingBufferSize = bufferSize;
using (MemoryStream stream = this.CreateTestStream(bufferSize))
@ -322,15 +322,14 @@ namespace SixLabors.ImageSharp.Tests.IO
using (var reader = new BufferedReadStream(this.configuration, stream))
{
Assert.Throws<ArgumentOutOfRangeException>(() => reader.Position = -stream.Length);
Assert.Throws<ArgumentOutOfRangeException>(() => reader.Position = stream.Length + 1);
}
}
}
[Fact]
public void BufferedStreamCanSetPositionToEnd()
[Theory]
[MemberData(nameof(BufferSizes))]
public void BufferedStreamCanSetPositionToEnd(int bufferSize)
{
var bufferSize = 8;
this.configuration.StreamProcessingBufferSize = bufferSize;
using (MemoryStream stream = this.CreateTestStream(bufferSize * 2))
{
@ -341,6 +340,21 @@ namespace SixLabors.ImageSharp.Tests.IO
}
}
[Theory]
[MemberData(nameof(BufferSizes))]
public void BufferedStreamCanSetPositionPastTheEnd(int bufferSize)
{
this.configuration.StreamProcessingBufferSize = bufferSize;
using (MemoryStream stream = this.CreateTestStream(bufferSize * 2))
{
using (var reader = new BufferedReadStream(this.configuration, stream))
{
reader.Position = reader.Length + 1;
Assert.Equal(stream.Length + 1, stream.Position);
}
}
}
private MemoryStream CreateTestStream(int length)
{
var buffer = new byte[length];

Loading…
Cancel
Save