Browse Source

Ensure buffer is always aligned and fix tests

pull/549/head
James Jackson-South 8 years ago
parent
commit
f64f2b0899
  1. 11
      src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs
  2. 11
      tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs

11
src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs

@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
internal class DoubleBufferedStreamReader : IDisposable
{
/// <summary>
/// The length, in bytes, of the chunk
/// The length, in bytes, of the buffering chunk
/// </summary>
public const int ChunkLength = 4096;
@ -38,7 +38,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
{
this.stream = stream;
this.Length = stream.Length;
this.buffer = memoryManager.AllocateCleanManagedByteBuffer(ChunkLength);
this.chunk = this.buffer.Array;
}
@ -62,7 +61,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
{
// Reset everything. It's easier than tracking.
this.position = value;
this.stream.Seek(this.position, SeekOrigin.Begin);
this.bytesRead = ChunkLength;
}
}
@ -96,8 +94,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
/// <param name="count">The number of bytes to skip</param>
public void Skip(int count)
{
this.position += count;
this.bytesRead += count;
this.Position += count;
}
/// <summary>
@ -144,9 +141,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
this.stream.Seek(this.position, SeekOrigin.Begin);
n = this.stream.Read(buffer, offset, count);
// Ensure next read fills the chunk
this.bytesRead = ChunkLength;
this.position += count;
this.Position += count;
}
return Math.Max(n, 0);

11
tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs

@ -4,19 +4,22 @@
using System;
using System.IO;
using SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components;
using SixLabors.ImageSharp.Memory;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{
public class DoubleBufferedStreamReaderTests
{
private MemoryManager manager = Configuration.Default.MemoryManager;
[Fact]
public void DoubleBufferedStreamReaderCanReadSingleByteFromOrigin()
{
using (MemoryStream stream = CreateTestStream())
{
byte[] expected = stream.ToArray();
var reader = new DoubleBufferedStreamReader(stream);
var reader = new DoubleBufferedStreamReader(this.manager, stream);
Assert.Equal(expected[0], reader.ReadByte());
@ -32,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
using (MemoryStream stream = CreateTestStream())
{
byte[] expected = stream.ToArray();
var reader = new DoubleBufferedStreamReader(stream);
var reader = new DoubleBufferedStreamReader(this.manager, stream);
for (int i = 0; i < expected.Length; i++)
{
@ -64,7 +67,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{
byte[] buffer = new byte[2];
byte[] expected = stream.ToArray();
var reader = new DoubleBufferedStreamReader(stream);
var reader = new DoubleBufferedStreamReader(this.manager, stream);
Assert.Equal(2, reader.Read(buffer, 0, 2));
Assert.Equal(expected[0], buffer[0]);
@ -83,7 +86,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{
byte[] buffer = new byte[2];
byte[] expected = stream.ToArray();
var reader = new DoubleBufferedStreamReader(stream);
var reader = new DoubleBufferedStreamReader(this.manager, stream);
for (int i = 0, o = 0; i < expected.Length / 2; i++, o += 2)
{

Loading…
Cancel
Save