From 30bf2c67c620b8074006a22374f454b1b713a553 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Jun 2026 19:18:17 +0000 Subject: [PATCH 1/3] Plan: bump dependency versions to latest --- nuget.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nuget.config b/nuget.config index ba47b6aa..765346e5 100644 --- a/nuget.config +++ b/nuget.config @@ -2,6 +2,6 @@ - + From 1abec32756aadf12cd72954d997c6c7d0c4290f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Jun 2026 19:26:34 +0000 Subject: [PATCH 2/3] Bump dependencies to latest; adapt to SharpCompress 1.0.0 API; restore nuget.config --- .../RecursiveExtractor.Cli.Tests.csproj | 6 ++-- .../RecursiveExtractor.Cli.csproj | 2 +- .../RecursiveExtractor.Tests.csproj | 10 +++--- RecursiveExtractor/Extractors/AceExtractor.cs | 4 +-- RecursiveExtractor/Extractors/ArcExtractor.cs | 4 +-- RecursiveExtractor/Extractors/ArjExtractor.cs | 4 +-- .../Extractors/BZip2Extractor.cs | 4 +-- RecursiveExtractor/Extractors/RarExtractor.cs | 4 +-- .../Extractors/SevenZipExtractor.cs | 4 +-- RecursiveExtractor/Extractors/TarExtractor.cs | 4 +-- RecursiveExtractor/Extractors/ZipExtractor.cs | 14 ++++---- RecursiveExtractor/RecursiveExtractor.csproj | 36 +++++++++---------- nuget.config | 2 +- 13 files changed, 49 insertions(+), 49 deletions(-) diff --git a/RecursiveExtractor.Cli.Tests/RecursiveExtractor.Cli.Tests.csproj b/RecursiveExtractor.Cli.Tests/RecursiveExtractor.Cli.Tests.csproj index 41d07b76..89ddffce 100644 --- a/RecursiveExtractor.Cli.Tests/RecursiveExtractor.Cli.Tests.csproj +++ b/RecursiveExtractor.Cli.Tests/RecursiveExtractor.Cli.Tests.csproj @@ -10,9 +10,9 @@ - - - + + + diff --git a/RecursiveExtractor.Cli/RecursiveExtractor.Cli.csproj b/RecursiveExtractor.Cli/RecursiveExtractor.Cli.csproj index df2aa1a5..1a24e848 100644 --- a/RecursiveExtractor.Cli/RecursiveExtractor.Cli.csproj +++ b/RecursiveExtractor.Cli/RecursiveExtractor.Cli.csproj @@ -29,7 +29,7 @@ - + diff --git a/RecursiveExtractor.Tests/RecursiveExtractor.Tests.csproj b/RecursiveExtractor.Tests/RecursiveExtractor.Tests.csproj index 248021b2..75fdbb97 100644 --- a/RecursiveExtractor.Tests/RecursiveExtractor.Tests.csproj +++ b/RecursiveExtractor.Tests/RecursiveExtractor.Tests.csproj @@ -10,12 +10,12 @@ - + - - - - + + + + diff --git a/RecursiveExtractor/Extractors/AceExtractor.cs b/RecursiveExtractor/Extractors/AceExtractor.cs index 54c0b2ff..f28076d7 100644 --- a/RecursiveExtractor/Extractors/AceExtractor.cs +++ b/RecursiveExtractor/Extractors/AceExtractor.cs @@ -33,7 +33,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - aceReader = AceReader.OpenReader(fileEntry.Content, new ReaderOptions() + aceReader = AceReader.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -104,7 +104,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - aceReader = AceReader.OpenReader(fileEntry.Content, new ReaderOptions() + aceReader = AceReader.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/ArcExtractor.cs b/RecursiveExtractor/Extractors/ArcExtractor.cs index 8247b15e..281cf185 100644 --- a/RecursiveExtractor/Extractors/ArcExtractor.cs +++ b/RecursiveExtractor/Extractors/ArcExtractor.cs @@ -33,7 +33,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - arcReader = ArcReader.OpenReader(fileEntry.Content, new ReaderOptions() + arcReader = ArcReader.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -107,7 +107,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - arcReader = ArcReader.OpenReader(fileEntry.Content, new ReaderOptions() + arcReader = ArcReader.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/ArjExtractor.cs b/RecursiveExtractor/Extractors/ArjExtractor.cs index bb836879..c3c4cb33 100644 --- a/RecursiveExtractor/Extractors/ArjExtractor.cs +++ b/RecursiveExtractor/Extractors/ArjExtractor.cs @@ -33,7 +33,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - arjReader = ArjReader.OpenReader(fileEntry.Content, new ReaderOptions() + arjReader = ArjReader.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -104,7 +104,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - arjReader = ArjReader.OpenReader(fileEntry.Content, new ReaderOptions() + arjReader = ArjReader.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/BZip2Extractor.cs b/RecursiveExtractor/Extractors/BZip2Extractor.cs index 0276b403..a35e9ae3 100644 --- a/RecursiveExtractor/Extractors/BZip2Extractor.cs +++ b/RecursiveExtractor/Extractors/BZip2Extractor.cs @@ -40,7 +40,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra var failed = false; try { - using var bzipStream = BZip2Stream.Create(fileEntry.Content, CompressionMode.Decompress, false, leaveOpen: false); + using var bzipStream = new BZip2Stream(fileEntry.Content, CompressionMode.Decompress, false); await bzipStream.CopyToAsync(fs); } catch (Exception e) @@ -99,7 +99,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { - using var bzipStream = BZip2Stream.Create(fileEntry.Content, CompressionMode.Decompress, false, leaveOpen: false); + using var bzipStream = new BZip2Stream(fileEntry.Content, CompressionMode.Decompress, false); bzipStream.CopyTo(fs); } catch (Exception e) diff --git a/RecursiveExtractor/Extractors/RarExtractor.cs b/RecursiveExtractor/Extractors/RarExtractor.cs index 85d7ff80..84373955 100644 --- a/RecursiveExtractor/Extractors/RarExtractor.cs +++ b/RecursiveExtractor/Extractors/RarExtractor.cs @@ -31,7 +31,7 @@ public RarExtractor(Extractor context) try { - rarArchive = (RarArchive)RarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); + rarArchive = RarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); // Test for invalid archives. This will throw invalidformatexception var t = rarArchive.IsSolid; if (rarArchive.Entries.Any(x => x.IsEncrypted)) @@ -66,7 +66,7 @@ public RarExtractor(Extractor context) try { fileEntry.Content.Position = 0; - rarArchive = (RarArchive)RarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LookForHeader = true, LeaveStreamOpen = true }); + rarArchive = RarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LookForHeader = true, LeaveStreamOpen = true }); var byt = new byte[1]; var encryptedEntry = rarArchive.Entries.FirstOrDefault(x => x is { IsEncrypted: true, Size: > 0 }); // Justification for !: Because we use FirstOrDefault encryptedEntry may be null, but we have a catch below for it diff --git a/RecursiveExtractor/Extractors/SevenZipExtractor.cs b/RecursiveExtractor/Extractors/SevenZipExtractor.cs index 869da19d..fc767135 100644 --- a/RecursiveExtractor/Extractors/SevenZipExtractor.cs +++ b/RecursiveExtractor/Extractors/SevenZipExtractor.cs @@ -83,7 +83,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra var needsPassword = false; try { - sevenZipArchive = (SevenZipArchive)SevenZipArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); + sevenZipArchive = SevenZipArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); if (sevenZipArchive.Entries.Where(x => !x.IsDirectory).Any(x => x.IsEncrypted)) { needsPassword = true; @@ -114,7 +114,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - sevenZipArchive = (SevenZipArchive)SevenZipArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LeaveStreamOpen = true }); + sevenZipArchive = SevenZipArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LeaveStreamOpen = true }); // When filenames are encrypted we can't access the size of individual files // But if we can accesss the total uncompressed size we have the right password try diff --git a/RecursiveExtractor/Extractors/TarExtractor.cs b/RecursiveExtractor/Extractors/TarExtractor.cs index 662f8597..00419eae 100644 --- a/RecursiveExtractor/Extractors/TarExtractor.cs +++ b/RecursiveExtractor/Extractors/TarExtractor.cs @@ -29,7 +29,7 @@ public TarExtractor(Extractor context) /// public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, ExtractorOptions options, ResourceGovernor governor, bool topLevel = true) { - using TarArchive archive = (TarArchive)TarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() + using TarArchive archive = TarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); @@ -103,7 +103,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra /// public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions options, ResourceGovernor governor, bool topLevel = true) { - using TarArchive archive = (TarArchive)TarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() + using TarArchive archive = TarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/ZipExtractor.cs b/RecursiveExtractor/Extractors/ZipExtractor.cs index 5140a60d..49da757c 100644 --- a/RecursiveExtractor/Extractors/ZipExtractor.cs +++ b/RecursiveExtractor/Extractors/ZipExtractor.cs @@ -37,7 +37,7 @@ public ZipExtractor(Extractor context) { // Create a new archive instance with the password to test it fileEntry.Content.Position = 0; - using var testArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() + using var testArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() { Password = password, LeaveStreamOpen = true @@ -73,7 +73,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() + zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -104,7 +104,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra // Recreate archive with password zipArchive.Dispose(); fileEntry.Content.Position = 0; - zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() + zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() { Password = foundPassword, LeaveStreamOpen = true @@ -199,7 +199,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() + zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -230,7 +230,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti // Recreate archive with password zipArchive.Dispose(); fileEntry.Content.Position = 0; - zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() + zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() { Password = foundPassword, LeaveStreamOpen = true @@ -329,7 +329,7 @@ private async IAsyncEnumerable YieldNonIndexedEntriesAsync( IReader? forwardReader = null; try { - forwardReader = ReaderFactory.OpenReader(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); + forwardReader = ReaderFactory.Open(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); } catch (Exception ex) { @@ -413,7 +413,7 @@ private IEnumerable YieldNonIndexedEntries( IReader? forwardReader = null; try { - forwardReader = ReaderFactory.OpenReader(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); + forwardReader = ReaderFactory.Open(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); } catch (Exception ex) { diff --git a/RecursiveExtractor/RecursiveExtractor.csproj b/RecursiveExtractor/RecursiveExtractor.csproj index 23a06036..b8416c3c 100644 --- a/RecursiveExtractor/RecursiveExtractor.csproj +++ b/RecursiveExtractor/RecursiveExtractor.csproj @@ -31,25 +31,25 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + + diff --git a/nuget.config b/nuget.config index 765346e5..ba47b6aa 100644 --- a/nuget.config +++ b/nuget.config @@ -2,6 +2,6 @@ - + From 26393c5545b8b39209fd29ebac0d4983c44ee385 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Jun 2026 20:27:59 +0000 Subject: [PATCH 3/3] Use SharpCompress 0.49.1 (1.0.0 is unlisted); revert to 0.49.x API; fix PAX-header test counts --- .../CliTests/CliTests.cs | 8 ++++---- .../ExtractorTests/DisposeBehaviorTests.cs | 16 ++++++++-------- .../ExtractorTests/ExpectedNumFilesTests.cs | 10 +++++----- .../ExtractorTests/FilterTests.cs | 8 ++++---- RecursiveExtractor/Extractors/AceExtractor.cs | 4 ++-- RecursiveExtractor/Extractors/ArcExtractor.cs | 4 ++-- RecursiveExtractor/Extractors/ArjExtractor.cs | 4 ++-- RecursiveExtractor/Extractors/BZip2Extractor.cs | 4 ++-- RecursiveExtractor/Extractors/RarExtractor.cs | 4 ++-- .../Extractors/SevenZipExtractor.cs | 4 ++-- RecursiveExtractor/Extractors/TarExtractor.cs | 4 ++-- RecursiveExtractor/Extractors/ZipExtractor.cs | 14 +++++++------- RecursiveExtractor/RecursiveExtractor.csproj | 2 +- 13 files changed, 43 insertions(+), 43 deletions(-) diff --git a/RecursiveExtractor.Cli.Tests/CliTests/CliTests.cs b/RecursiveExtractor.Cli.Tests/CliTests/CliTests.cs index 7c9eb773..71a35820 100644 --- a/RecursiveExtractor.Cli.Tests/CliTests/CliTests.cs +++ b/RecursiveExtractor.Cli.Tests/CliTests/CliTests.cs @@ -27,11 +27,11 @@ public static TheoryData CliArchiveData { { "TestData.zip", 5 }, { "TestData.7z", 3 }, - { "TestData.tar", 6 }, + { "TestData.tar", 5 }, { "TestData.rar", 3 }, { "TestData.rar4", 3 }, - { "TestData.tar.bz2", 6 }, - { "TestData.tar.gz", 6 }, + { "TestData.tar.bz2", 5 }, + { "TestData.tar.gz", 5 }, { "TestData.tar.xz", 3 }, { "sysvbanner_1.0-17fakesync1_amd64.deb", 8 }, { "TestData.a", 3 }, @@ -39,7 +39,7 @@ public static TheoryData CliArchiveData { "TestData.iso", 3 }, { "TestData.vhdx", 3 }, { "EmptyFile.txt", 1 }, - { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 54 : 52 }, + { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 51 : 49 }, }; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { diff --git a/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs b/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs index da7883bc..af9d136b 100644 --- a/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs +++ b/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs @@ -23,11 +23,11 @@ public static TheoryData DisposeData var data = new TheoryData { { "TestData.7z", 3, false }, - { "TestData.tar", 6, false }, + { "TestData.tar", 5, false }, { "TestData.rar", 3, false }, { "TestData.rar4", 3, false }, - { "TestData.tar.bz2", 6, false }, - { "TestData.tar.gz", 6, false }, + { "TestData.tar.bz2", 5, false }, + { "TestData.tar.gz", 5, false }, { "TestData.tar.xz", 3, false }, { "sysvbanner_1.0-17fakesync1_amd64.deb", 8, false }, { "TestData.a", 3, false }, @@ -37,11 +37,11 @@ public static TheoryData DisposeData { "EmptyFile.txt", 1, false }, { "TestData.zip", 5, true }, { "TestData.7z", 3, true }, - { "TestData.tar", 6, true }, + { "TestData.tar", 5, true }, { "TestData.rar", 3, true }, { "TestData.rar4", 3, true }, - { "TestData.tar.bz2", 6, true }, - { "TestData.tar.gz", 6, true }, + { "TestData.tar.bz2", 5, true }, + { "TestData.tar.gz", 5, true }, { "TestData.tar.xz", 3, true }, { "sysvbanner_1.0-17fakesync1_amd64.deb", 8, true }, { "TestData.a", 3, true }, @@ -49,8 +49,8 @@ public static TheoryData DisposeData { "TestData.iso", 3, true }, { "TestData.vhdx", 3, true }, { "EmptyFile.txt", 1, true }, - { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 54 : 52, true }, - { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 54 : 52, false }, + { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 51 : 49, true }, + { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 51 : 49, false }, }; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { diff --git a/RecursiveExtractor.Tests/ExtractorTests/ExpectedNumFilesTests.cs b/RecursiveExtractor.Tests/ExtractorTests/ExpectedNumFilesTests.cs index 92dd3c24..3f8eeaad 100644 --- a/RecursiveExtractor.Tests/ExtractorTests/ExpectedNumFilesTests.cs +++ b/RecursiveExtractor.Tests/ExtractorTests/ExpectedNumFilesTests.cs @@ -28,11 +28,11 @@ public static TheoryData ArchiveData { "100trees.7z", 101 }, { "TestData.zip", 5 }, { "TestData.7z",3 }, - { "TestData.tar", 6 }, + { "TestData.tar", 5 }, { "TestData.rar",3 }, { "TestData.rar4",3 }, - { "TestData.tar.bz2", 6 }, - { "TestData.tar.gz", 6 }, + { "TestData.tar.bz2", 5 }, + { "TestData.tar.gz", 5 }, { "TestData.tar.xz",3 }, { "sysvbanner_1.0-17fakesync1_amd64.deb", 8 }, { "TestData.a",3 }, @@ -40,7 +40,7 @@ public static TheoryData ArchiveData { "TestData.iso",3 }, { "TestData.vhdx",3 }, { "EmptyFile.txt", 1 }, - { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 54 : 52 }, + { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 51 : 49 }, { "UdfTest.iso", 3 }, { "UdfTestWithMultiSystem.iso", 3 }, { "TestData.arj", 1 }, @@ -69,7 +69,7 @@ public static TheoryData NoRecursionData { "100trees.7z", 101 }, { "TestData.zip", 5 }, { "TestData.7z", 3 }, - { "TestData.tar", 6 }, + { "TestData.tar", 5 }, { "TestData.rar", 3 }, { "TestData.rar4", 3 }, { "TestData.tar.bz2", 1 }, diff --git a/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs b/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs index 3ed7a32c..50ee5c3e 100644 --- a/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs +++ b/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs @@ -56,11 +56,11 @@ public static TheoryData DenyFilterData { { "TestData.zip", 4 }, { "TestData.7z", 2 }, - { "TestData.tar", 5 }, + { "TestData.tar", 4 }, { "TestData.rar", 2 }, { "TestData.rar4", 2 }, - { "TestData.tar.bz2", 5 }, - { "TestData.tar.gz", 5 }, + { "TestData.tar.bz2", 4 }, + { "TestData.tar.gz", 4 }, { "TestData.tar.xz", 2 }, { "sysvbanner_1.0-17fakesync1_amd64.deb", 8 }, { "TestData.a", 3 }, @@ -68,7 +68,7 @@ public static TheoryData DenyFilterData { "TestData.iso", 2 }, { "TestData.vhdx", 2 }, { "EmptyFile.txt", 1 }, - { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 45 : 44 }, + { "TestDataArchivesNested.zip", RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 42 : 41 }, }; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { diff --git a/RecursiveExtractor/Extractors/AceExtractor.cs b/RecursiveExtractor/Extractors/AceExtractor.cs index f28076d7..54c0b2ff 100644 --- a/RecursiveExtractor/Extractors/AceExtractor.cs +++ b/RecursiveExtractor/Extractors/AceExtractor.cs @@ -33,7 +33,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - aceReader = AceReader.Open(fileEntry.Content, new ReaderOptions() + aceReader = AceReader.OpenReader(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -104,7 +104,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - aceReader = AceReader.Open(fileEntry.Content, new ReaderOptions() + aceReader = AceReader.OpenReader(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/ArcExtractor.cs b/RecursiveExtractor/Extractors/ArcExtractor.cs index 281cf185..8247b15e 100644 --- a/RecursiveExtractor/Extractors/ArcExtractor.cs +++ b/RecursiveExtractor/Extractors/ArcExtractor.cs @@ -33,7 +33,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - arcReader = ArcReader.Open(fileEntry.Content, new ReaderOptions() + arcReader = ArcReader.OpenReader(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -107,7 +107,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - arcReader = ArcReader.Open(fileEntry.Content, new ReaderOptions() + arcReader = ArcReader.OpenReader(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/ArjExtractor.cs b/RecursiveExtractor/Extractors/ArjExtractor.cs index c3c4cb33..bb836879 100644 --- a/RecursiveExtractor/Extractors/ArjExtractor.cs +++ b/RecursiveExtractor/Extractors/ArjExtractor.cs @@ -33,7 +33,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - arjReader = ArjReader.Open(fileEntry.Content, new ReaderOptions() + arjReader = ArjReader.OpenReader(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -104,7 +104,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - arjReader = ArjReader.Open(fileEntry.Content, new ReaderOptions() + arjReader = ArjReader.OpenReader(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/BZip2Extractor.cs b/RecursiveExtractor/Extractors/BZip2Extractor.cs index a35e9ae3..0276b403 100644 --- a/RecursiveExtractor/Extractors/BZip2Extractor.cs +++ b/RecursiveExtractor/Extractors/BZip2Extractor.cs @@ -40,7 +40,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra var failed = false; try { - using var bzipStream = new BZip2Stream(fileEntry.Content, CompressionMode.Decompress, false); + using var bzipStream = BZip2Stream.Create(fileEntry.Content, CompressionMode.Decompress, false, leaveOpen: false); await bzipStream.CopyToAsync(fs); } catch (Exception e) @@ -99,7 +99,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { - using var bzipStream = new BZip2Stream(fileEntry.Content, CompressionMode.Decompress, false); + using var bzipStream = BZip2Stream.Create(fileEntry.Content, CompressionMode.Decompress, false, leaveOpen: false); bzipStream.CopyTo(fs); } catch (Exception e) diff --git a/RecursiveExtractor/Extractors/RarExtractor.cs b/RecursiveExtractor/Extractors/RarExtractor.cs index 84373955..85d7ff80 100644 --- a/RecursiveExtractor/Extractors/RarExtractor.cs +++ b/RecursiveExtractor/Extractors/RarExtractor.cs @@ -31,7 +31,7 @@ public RarExtractor(Extractor context) try { - rarArchive = RarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); + rarArchive = (RarArchive)RarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); // Test for invalid archives. This will throw invalidformatexception var t = rarArchive.IsSolid; if (rarArchive.Entries.Any(x => x.IsEncrypted)) @@ -66,7 +66,7 @@ public RarExtractor(Extractor context) try { fileEntry.Content.Position = 0; - rarArchive = RarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LookForHeader = true, LeaveStreamOpen = true }); + rarArchive = (RarArchive)RarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LookForHeader = true, LeaveStreamOpen = true }); var byt = new byte[1]; var encryptedEntry = rarArchive.Entries.FirstOrDefault(x => x is { IsEncrypted: true, Size: > 0 }); // Justification for !: Because we use FirstOrDefault encryptedEntry may be null, but we have a catch below for it diff --git a/RecursiveExtractor/Extractors/SevenZipExtractor.cs b/RecursiveExtractor/Extractors/SevenZipExtractor.cs index fc767135..869da19d 100644 --- a/RecursiveExtractor/Extractors/SevenZipExtractor.cs +++ b/RecursiveExtractor/Extractors/SevenZipExtractor.cs @@ -83,7 +83,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra var needsPassword = false; try { - sevenZipArchive = SevenZipArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); + sevenZipArchive = (SevenZipArchive)SevenZipArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); if (sevenZipArchive.Entries.Where(x => !x.IsDirectory).Any(x => x.IsEncrypted)) { needsPassword = true; @@ -114,7 +114,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - sevenZipArchive = SevenZipArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LeaveStreamOpen = true }); + sevenZipArchive = (SevenZipArchive)SevenZipArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { Password = password, LeaveStreamOpen = true }); // When filenames are encrypted we can't access the size of individual files // But if we can accesss the total uncompressed size we have the right password try diff --git a/RecursiveExtractor/Extractors/TarExtractor.cs b/RecursiveExtractor/Extractors/TarExtractor.cs index 00419eae..662f8597 100644 --- a/RecursiveExtractor/Extractors/TarExtractor.cs +++ b/RecursiveExtractor/Extractors/TarExtractor.cs @@ -29,7 +29,7 @@ public TarExtractor(Extractor context) /// public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, ExtractorOptions options, ResourceGovernor governor, bool topLevel = true) { - using TarArchive archive = TarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() + using TarArchive archive = (TarArchive)TarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); @@ -103,7 +103,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra /// public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions options, ResourceGovernor governor, bool topLevel = true) { - using TarArchive archive = TarArchive.Open(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() + using TarArchive archive = (TarArchive)TarArchive.OpenArchive(fileEntry.Content, new SharpCompress.Readers.ReaderOptions() { LeaveStreamOpen = true }); diff --git a/RecursiveExtractor/Extractors/ZipExtractor.cs b/RecursiveExtractor/Extractors/ZipExtractor.cs index 49da757c..5140a60d 100644 --- a/RecursiveExtractor/Extractors/ZipExtractor.cs +++ b/RecursiveExtractor/Extractors/ZipExtractor.cs @@ -37,7 +37,7 @@ public ZipExtractor(Extractor context) { // Create a new archive instance with the password to test it fileEntry.Content.Position = 0; - using var testArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() + using var testArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() { Password = password, LeaveStreamOpen = true @@ -73,7 +73,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra try { fileEntry.Content.Position = 0; - zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() + zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -104,7 +104,7 @@ public async IAsyncEnumerable ExtractAsync(FileEntry fileEntry, Extra // Recreate archive with password zipArchive.Dispose(); fileEntry.Content.Position = 0; - zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() + zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() { Password = foundPassword, LeaveStreamOpen = true @@ -199,7 +199,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti try { fileEntry.Content.Position = 0; - zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() + zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() { LeaveStreamOpen = true }); @@ -230,7 +230,7 @@ public IEnumerable Extract(FileEntry fileEntry, ExtractorOptions opti // Recreate archive with password zipArchive.Dispose(); fileEntry.Content.Position = 0; - zipArchive = ZipArchive.Open(fileEntry.Content, new ReaderOptions() + zipArchive = (ZipArchive)ZipArchive.OpenArchive(fileEntry.Content, new ReaderOptions() { Password = foundPassword, LeaveStreamOpen = true @@ -329,7 +329,7 @@ private async IAsyncEnumerable YieldNonIndexedEntriesAsync( IReader? forwardReader = null; try { - forwardReader = ReaderFactory.Open(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); + forwardReader = ReaderFactory.OpenReader(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); } catch (Exception ex) { @@ -413,7 +413,7 @@ private IEnumerable YieldNonIndexedEntries( IReader? forwardReader = null; try { - forwardReader = ReaderFactory.Open(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); + forwardReader = ReaderFactory.OpenReader(parentEntry.Content, new ReaderOptions { LeaveStreamOpen = true }); } catch (Exception ex) { diff --git a/RecursiveExtractor/RecursiveExtractor.csproj b/RecursiveExtractor/RecursiveExtractor.csproj index b8416c3c..53fd4f35 100644 --- a/RecursiveExtractor/RecursiveExtractor.csproj +++ b/RecursiveExtractor/RecursiveExtractor.csproj @@ -48,7 +48,7 @@ - +