From 7912469709a1569169b13f0dae432ae515e5e97a Mon Sep 17 00:00:00 2001 From: TekH Date: Thu, 23 Oct 2025 14:34:57 +0200 Subject: [PATCH] refactor(pdf): add output stream disposal management to Pdf class - Added `disposeOutputStream` parameter to Pdf constructor - Updated `FromMemory` to set output stream disposal based on null value - Ensured proper cleanup of output stream in Dispose and DisposeAsync methods - Improved resource management to prevent potential memory leaks --- EnvelopeGenerator.PdfEditor/Pdf.cs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/EnvelopeGenerator.PdfEditor/Pdf.cs b/EnvelopeGenerator.PdfEditor/Pdf.cs index 8b1d39ac..325c2775 100644 --- a/EnvelopeGenerator.PdfEditor/Pdf.cs +++ b/EnvelopeGenerator.PdfEditor/Pdf.cs @@ -24,7 +24,7 @@ namespace EnvelopeGenerator.PdfEditor #endif outputStream = null) { - return new Pdf(stream, outputStream ?? new MemoryStream(), disposeInputStream: false); + return new Pdf(stream, outputStream ?? new MemoryStream(), disposeInputStream: false, disposeOutputStream: outputStream is null); } } @@ -39,8 +39,9 @@ namespace EnvelopeGenerator.PdfEditor private readonly PdfWriter _writer; private readonly bool _disposeInputStream; + private readonly bool _disposeOutputStream; - public Pdf(TInputStream inputStream, TOutputStream outputStream, bool disposeInputStream = true) + public Pdf(TInputStream inputStream, TOutputStream outputStream, bool disposeInputStream = true, bool disposeOutputStream = true) { _inputStream = inputStream; _outputStream = outputStream; @@ -48,6 +49,7 @@ namespace EnvelopeGenerator.PdfEditor _writer = new PdfWriter(outputStream); _doc = new PdfDocument(_reader, _writer); _disposeInputStream = disposeInputStream; + _disposeOutputStream = disposeOutputStream; } /// @@ -160,7 +162,7 @@ namespace EnvelopeGenerator.PdfEditor // Managed resources _doc?.Close(); if (_disposeInputStream) _inputStream?.Dispose(); - _outputStream?.Dispose(); + if(_disposeOutputStream) _outputStream?.Dispose(); } else { @@ -168,7 +170,7 @@ namespace EnvelopeGenerator.PdfEditor // Unmanaged resources such as PdfDocument, PdfReader, and PdfWriter are already IDisposable; we close them here try { _doc?.Close(); } catch { } try { if(_disposeInputStream) _inputStream?.Dispose(); } catch { } - try { _outputStream?.Dispose(); } catch { } + try { if (_disposeOutputStream) _outputStream?.Dispose(); } catch { } } _disposed = true; @@ -188,10 +190,13 @@ namespace EnvelopeGenerator.PdfEditor _inputStream.Dispose(); } - if (_outputStream is IAsyncDisposable asyncOutput) - await asyncOutput.DisposeAsync(); - else - _outputStream?.Dispose(); + if (_disposeOutputStream) + { + if (_outputStream is IAsyncDisposable asyncOutput) + await asyncOutput.DisposeAsync(); + else + _outputStream?.Dispose(); + } _disposed = true; GC.SuppressFinalize(this);