From 9e80da911788e32a050c8cdeaf1737f9515a5932 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 24 Mar 2026 11:43:20 +0100 Subject: [PATCH] Try fix issue with undisposed buffers --- .../Exr/Compression/Compressors/ZipExrCompressor.cs | 9 +++++++-- .../Exr/Compression/Decompressors/ZipExrCompression.cs | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs b/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs index 8a7b784601..587ecb7562 100644 --- a/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs +++ b/src/ImageSharp/Formats/Exr/Compression/Compressors/ZipExrCompressor.cs @@ -11,7 +11,7 @@ internal class ZipExrCompressor : ExrBaseCompressor { private readonly DeflateCompressionLevel compressionLevel; - private MemoryStream memoryStream = new(); + private readonly MemoryStream memoryStream = new(); private readonly System.Buffers.IMemoryOwner buffer; @@ -60,12 +60,17 @@ internal class ZipExrCompressor : ExrBaseCompressor byte[] buffer = this.memoryStream.GetBuffer(); this.Output.Write(buffer, 0, size); - this.memoryStream = new(); + // Reset memory stream for next pixel row. + this.memoryStream.Seek(0, SeekOrigin.Begin); + this.memoryStream.SetLength(0); + return (uint)size; } /// protected override void Dispose(bool disposing) { + this.buffer.Dispose(); + this.memoryStream?.Dispose(); } } diff --git a/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs b/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs index 5424634523..b8dc5efa8e 100644 --- a/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs +++ b/src/ImageSharp/Formats/Exr/Compression/Decompressors/ZipExrCompression.cs @@ -30,7 +30,7 @@ internal class ZipExrCompression : ExrBaseDecompressor return left > 0 ? left : 0; }); inflateStream.AllocateNewBytes((int)this.BytesPerBlock, true); - DeflateStream dataStream = inflateStream.CompressedStream!; + using DeflateStream dataStream = inflateStream.CompressedStream!; int totalRead = 0; while (totalRead < buffer.Length)