From 7b7eba8cd979500077277425f1db421d92c28574 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 21 Jan 2026 16:11:40 +0000 Subject: [PATCH] more fixes --- .../Compressors/BZip2/BZip2Stream.cs | 6 +- .../Compressors/BZip2/CBZip2InputStream.cs | 13 ++-- src/SharpCompress/IO/SharpCompressStream.cs | 12 +--- .../GZip/GZipReaderAsyncTests.cs | 65 ------------------- .../Streams/LeaveOpenBehaviorTests.cs | 9 +-- .../Zip/ZipArchiveAsyncTests.cs | 1 + 6 files changed, 17 insertions(+), 89 deletions(-) diff --git a/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs b/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs index 3dad93a9..cde6e300 100644 --- a/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs +++ b/src/SharpCompress/Compressors/BZip2/BZip2Stream.cs @@ -59,7 +59,11 @@ public sealed class BZip2Stream : Stream, IStreamStack } else { - bZip2Stream.stream = CBZip2InputStream.Create(stream, decompressConcatenated, leaveOpen); + bZip2Stream.stream = CBZip2InputStream.Create( + stream, + decompressConcatenated, + leaveOpen + ); } return bZip2Stream; diff --git a/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs b/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs index df516780..eedf7a39 100644 --- a/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs +++ b/src/SharpCompress/Compressors/BZip2/CBZip2InputStream.cs @@ -168,8 +168,8 @@ internal class CBZip2InputStream : Stream, IStreamStack storedCombinedCRC; private int computedBlockCRC, computedCombinedCRC; - private bool decompressConcatenated; - private bool leaveOpen; + private bool decompressConcatenated; + private bool leaveOpen; private int i2, count, @@ -185,8 +185,11 @@ internal class CBZip2InputStream : Stream, IStreamStack private CBZip2InputStream() { } - public static CBZip2InputStream Create(Stream zStream, bool decompressConcatenated, - bool leaveOpen) + public static CBZip2InputStream Create( + Stream zStream, + bool decompressConcatenated, + bool leaveOpen + ) { var cbZip2InputStream = new CBZip2InputStream(); cbZip2InputStream.decompressConcatenated = decompressConcatenated; @@ -227,7 +230,7 @@ internal class CBZip2InputStream : Stream, IStreamStack this.DebugDispose(typeof(CBZip2InputStream)); #endif base.Dispose(disposing); - bsStream?.Dispose(); + bsStream?.Dispose(); } internal static int[][] InitIntArray(int n1, int n2) diff --git a/src/SharpCompress/IO/SharpCompressStream.cs b/src/SharpCompress/IO/SharpCompressStream.cs index bc4cad50..ba3fb2a2 100644 --- a/src/SharpCompress/IO/SharpCompressStream.cs +++ b/src/SharpCompress/IO/SharpCompressStream.cs @@ -141,7 +141,7 @@ public class SharpCompressStream : Stream, IStreamStack #if DEBUG_STREAMS this.DebugDispose(typeof(SharpCompressStream)); #endif - if (this.LeaveOpen) + if (_isDisposed || this.LeaveOpen) { return; } @@ -152,10 +152,6 @@ public class SharpCompressStream : Stream, IStreamStack $"Attempt to dispose of a {nameof(SharpCompressStream)} when {nameof(ThrowOnDispose)} is {ThrowOnDispose}" ); } - if (_isDisposed) - { - return; - } _isDisposed = true; base.Dispose(disposing); if (disposing) @@ -455,7 +451,7 @@ public class SharpCompressStream : Stream, IStreamStack #if DEBUG_STREAMS this.DebugDispose(typeof(SharpCompressStream)); #endif - if (this.LeaveOpen) + if (_isDisposed || LeaveOpen) { return; } @@ -465,10 +461,6 @@ public class SharpCompressStream : Stream, IStreamStack $"Attempt to dispose of a {nameof(SharpCompressStream)} when {nameof(ThrowOnDispose)} is {ThrowOnDispose}" ); } - if (_isDisposed) - { - return; - } _isDisposed = true; await base.DisposeAsync(); diff --git a/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs b/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs index afcf3fd5..7eb950f5 100644 --- a/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs +++ b/tests/SharpCompress.Test/GZip/GZipReaderAsyncTests.cs @@ -37,69 +37,4 @@ public class GZipReaderAsyncTests : ReaderTests } } } - - protected async Task ReadAsync( - string testArchive, - CompressionType expectedCompression, - ReaderOptions? options = null - ) - { - testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); - - options ??= new ReaderOptions() { BufferSize = 0x20000 }; - - options.LeaveStreamOpen = true; - await ReadImplAsync(testArchive, expectedCompression, options); - - options.LeaveStreamOpen = false; - await ReadImplAsync(testArchive, expectedCompression, options); - VerifyFiles(); - } - - private async ValueTask ReadImplAsync( - string testArchive, - CompressionType expectedCompression, - ReaderOptions options - ) - { - using var file = File.OpenRead(testArchive); - using var protectedStream = SharpCompressStream.Create( - new ForwardOnlyStream(file, options.BufferSize), - leaveOpen: true, - throwOnDispose: true, - bufferSize: options.BufferSize - ); - using var testStream = new TestStream(protectedStream); - await using ( - var reader = await ReaderFactory.OpenAsyncReader( - new AsyncOnlyStream(testStream), - options, - default - ) - ) - { - await UseReaderAsync(reader, expectedCompression); - protectedStream.ThrowOnDispose = false; - Assert.False(testStream.IsDisposed, $"{nameof(testStream)} prematurely closed"); - } - - var message = - $"{nameof(options.LeaveStreamOpen)} is set to '{options.LeaveStreamOpen}', so {nameof(testStream.IsDisposed)} should be set to '{!testStream.IsDisposed}', but is set to {testStream.IsDisposed}"; - Assert.True(options.LeaveStreamOpen != testStream.IsDisposed, message); - } - - private async ValueTask UseReaderAsync(IAsyncReader reader, CompressionType expectedCompression) - { - while (await reader.MoveToNextEntryAsync()) - { - if (!reader.Entry.IsDirectory) - { - Assert.Equal(expectedCompression, reader.Entry.CompressionType); - await reader.WriteEntryToDirectoryAsync( - SCRATCH_FILES_PATH, - new ExtractionOptions { ExtractFullPath = true, Overwrite = true } - ); - } - } - } } diff --git a/tests/SharpCompress.Test/Streams/LeaveOpenBehaviorTests.cs b/tests/SharpCompress.Test/Streams/LeaveOpenBehaviorTests.cs index 3a792158..a28de311 100644 --- a/tests/SharpCompress.Test/Streams/LeaveOpenBehaviorTests.cs +++ b/tests/SharpCompress.Test/Streams/LeaveOpenBehaviorTests.cs @@ -18,14 +18,7 @@ public class LeaveOpenBehaviorTests public void BZip2Stream_Compress_LeaveOpen_False() { using var innerStream = new TestStream(new MemoryStream()); - using ( - var bzip2 = BZip2Stream.Create( - innerStream, - CompressionMode.Compress, - false, - false - ) - ) + using (var bzip2 = BZip2Stream.Create(innerStream, CompressionMode.Compress, false, false)) { bzip2.Write(CreateTestData(), 0, CreateTestData().Length); bzip2.Finish(); diff --git a/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs b/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs index 280512da..caba1e15 100644 --- a/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs @@ -249,6 +249,7 @@ public class ZipArchiveAsyncTests : ArchiveTests ); } + await Task.Delay(1000); VerifyFiles(); Assert.True(progressReports.Count > 0, "Progress reports should be generated"); }