From d43ec499e3cdfe1e0d100e12c781360471e9bc69 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 11 May 2022 14:32:00 +0200 Subject: [PATCH] Use memory allocator for destination buffer for the uncomressed bytes --- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index 470a245b24..16971b5b86 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -1222,10 +1222,12 @@ namespace SixLabors.ImageSharp.Formats.Png { fixed (byte* compressedDataBase = compressedData) { + using (IMemoryOwner destBuffer = this.memoryAllocator.Allocate(this.Configuration.StreamProcessingBufferSize)) using (var memoryStream = new UnmanagedMemoryStream(compressedDataBase, compressedData.Length)) using (var bufferedStream = new BufferedReadStream(this.Configuration, memoryStream)) using (var inflateStream = new ZlibInflateStream(bufferedStream)) { + Span dest = destBuffer.GetSpan(); if (!inflateStream.AllocateNewBytes(compressedData.Length, false)) { uncompressedBytesArray = Array.Empty(); @@ -1233,13 +1235,11 @@ namespace SixLabors.ImageSharp.Formats.Png } var uncompressedBytes = new List(compressedData.Length); - - // Note: this uses a buffer which is only 4 bytes long to read the stream, maybe allocating a larger buffer makes sense here. - int bytesRead = inflateStream.CompressedStream.Read(this.buffer, 0, this.buffer.Length); + int bytesRead = inflateStream.CompressedStream.Read(dest, 0, dest.Length); while (bytesRead != 0) { - uncompressedBytes.AddRange(this.buffer.AsSpan(0, bytesRead).ToArray()); - bytesRead = inflateStream.CompressedStream.Read(this.buffer, 0, this.buffer.Length); + uncompressedBytes.AddRange(dest.Slice(0, bytesRead).ToArray()); + bytesRead = inflateStream.CompressedStream.Read(dest, 0, dest.Length); } uncompressedBytesArray = uncompressedBytes.ToArray();