From b622a2ce73f88adba1866c3206c74911e93ce003 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Thu, 22 Jan 2026 16:38:35 +0000 Subject: [PATCH] fix disposal and other simple issues --- src/SharpCompress/Archives/Tar/TarArchive.Factory.cs | 4 ++-- src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs | 10 ++++++++-- src/SharpCompress/Common/Zip/ZipFilePart.Async.cs | 2 +- src/SharpCompress/Writers/AbstractWriter.Async.cs | 2 +- src/SharpCompress/Writers/Zip/ZipWriter.cs | 2 +- tests/SharpCompress.Test/ArchiveTests.cs | 1 + tests/SharpCompress.Test/GZip/AsyncTests.cs | 2 +- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs b/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs index 609b5ccd..a1b834e8 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs @@ -34,7 +34,7 @@ public partial class TarArchive new SourceStream( fileInfo, i => ArchiveVolumeFactory.GetFilePart(i, fileInfo), - readerOptions ?? new ReaderOptions() { LeaveStreamOpen = false} + readerOptions ?? new ReaderOptions() { LeaveStreamOpen = false } ) ); } @@ -50,7 +50,7 @@ public partial class TarArchive new SourceStream( files[0], i => i < files.Length ? files[i] : null, - readerOptions ?? new ReaderOptions() { LeaveStreamOpen = false} + readerOptions ?? new ReaderOptions() { LeaveStreamOpen = false } ) ); } diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs b/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs index d917c38d..cd5edeb9 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs @@ -21,7 +21,7 @@ public partial class ZipArchive public static IWritableArchive OpenArchive(string filePath, ReaderOptions? readerOptions = null) { filePath.NotNullOrEmpty(nameof(filePath)); - return OpenArchive(new FileInfo(filePath), readerOptions ?? new ReaderOptions()); + return OpenArchive(new FileInfo(filePath), readerOptions); } public static IWritableArchive OpenArchive( @@ -35,6 +35,9 @@ public partial class ZipArchive fileInfo, i => ZipArchiveVolumeFactory.GetFilePart(i, fileInfo), readerOptions ?? new ReaderOptions() + { + LeaveStreamOpen = false + } ) ); } @@ -51,6 +54,9 @@ public partial class ZipArchive files[0], i => i < files.Length ? files[i] : null, readerOptions ?? new ReaderOptions() + { + LeaveStreamOpen = false + } ) ); } @@ -81,7 +87,7 @@ public partial class ZipArchive } return new ZipArchive( - new SourceStream(stream, i => null, readerOptions ?? new ReaderOptions()) + new SourceStream(stream, i => null, readerOptions ?? new ReaderOptions()) ); } diff --git a/src/SharpCompress/Common/Zip/ZipFilePart.Async.cs b/src/SharpCompress/Common/Zip/ZipFilePart.Async.cs index a1eac925..6b3a3dc5 100644 --- a/src/SharpCompress/Common/Zip/ZipFilePart.Async.cs +++ b/src/SharpCompress/Common/Zip/ZipFilePart.Async.cs @@ -179,7 +179,7 @@ internal abstract partial class ZipFilePart } case ZipCompressionMethod.BZip2: { - return BZip2Stream.Create(stream, CompressionMode.Decompress, false); + return await BZip2Stream.CreateAsync(stream, CompressionMode.Decompress, false, cancellationToken: cancellationToken); } case ZipCompressionMethod.LZMA: { diff --git a/src/SharpCompress/Writers/AbstractWriter.Async.cs b/src/SharpCompress/Writers/AbstractWriter.Async.cs index b00bd8af..e2960ab9 100644 --- a/src/SharpCompress/Writers/AbstractWriter.Async.cs +++ b/src/SharpCompress/Writers/AbstractWriter.Async.cs @@ -33,7 +33,7 @@ public abstract partial class AbstractWriter await Task.CompletedTask.ConfigureAwait(false); } - public ValueTask DisposeAsync() + public ValueTask DisposeAsync() { if (!_isDisposed) { diff --git a/src/SharpCompress/Writers/Zip/ZipWriter.cs b/src/SharpCompress/Writers/Zip/ZipWriter.cs index 8ac90f23..24e6974a 100644 --- a/src/SharpCompress/Writers/Zip/ZipWriter.cs +++ b/src/SharpCompress/Writers/Zip/ZipWriter.cs @@ -52,7 +52,7 @@ public partial class ZipWriter : AbstractWriter protected override void Dispose(bool isDisposing) { - if (isDisposing && OutputStream is not null) + if (isDisposing) { ulong size = 0; foreach (var entry in entries) diff --git a/tests/SharpCompress.Test/ArchiveTests.cs b/tests/SharpCompress.Test/ArchiveTests.cs index 731965f7..79b4bbd0 100644 --- a/tests/SharpCompress.Test/ArchiveTests.cs +++ b/tests/SharpCompress.Test/ArchiveTests.cs @@ -429,6 +429,7 @@ public class ArchiveTests : ReaderTests if (compressionLevel.HasValue) { writerOptions.CompressionLevel = compressionLevel.Value; + writerOptions.LeaveStreamOpen = true; } return WriterFactory.OpenAsyncWriter( new AsyncOnlyStream(stream), diff --git a/tests/SharpCompress.Test/GZip/AsyncTests.cs b/tests/SharpCompress.Test/GZip/AsyncTests.cs index 402a9d3e..7c3a2419 100644 --- a/tests/SharpCompress.Test/GZip/AsyncTests.cs +++ b/tests/SharpCompress.Test/GZip/AsyncTests.cs @@ -110,7 +110,7 @@ public class AsyncTests : TestBase var writer = WriterFactory.OpenAsyncWriter( new AsyncOnlyStream(stream), ArchiveType.Zip, - CompressionType.Deflate + new WriterOptions(CompressionType.Deflate) { LeaveStreamOpen = false } ) ) {