From 41432ab0624bbf19dc5497fd37430df4c49d24f7 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Thu, 23 Apr 2026 11:43:10 +0100 Subject: [PATCH] human fix --- .../Archives/ArchiveFactory.Async.cs | 8 +---- src/SharpCompress/Archives/ArchiveFactory.cs | 3 +- .../Archives/GZip/GZipArchive.Factory.cs | 3 +- .../Archives/Rar/RarArchive.Factory.cs | 3 +- .../SevenZip/SevenZipArchive.Factory.cs | 3 +- .../Archives/Tar/TarArchive.Factory.cs | 6 ++-- .../Archives/Zip/ZipArchive.Factory.cs | 3 +- .../StreamValidationExtensions.cs | 30 +++++-------------- src/SharpCompress/packages.lock.json | 12 ++++---- .../SharpCompress.Test/ReaderFactoryTests.cs | 4 ++- 10 files changed, 25 insertions(+), 50 deletions(-) diff --git a/src/SharpCompress/Archives/ArchiveFactory.Async.cs b/src/SharpCompress/Archives/ArchiveFactory.Async.cs index 6518952f..84bb671d 100644 --- a/src/SharpCompress/Archives/ArchiveFactory.Async.cs +++ b/src/SharpCompress/Archives/ArchiveFactory.Async.cs @@ -92,13 +92,7 @@ public static partial class ArchiveFactory ) { cancellationToken.ThrowIfCancellationRequested(); - var streamsArray = streams.RequireReadable(); - streamsArray.RequireSeekable(); - if (streamsArray.Count == 0) - { - throw new ArchiveOperationException("No streams"); - } - + var streamsArray = streams.RequireReadable().RequireSeekable().ToList(); var firstStream = streamsArray[0]; if (streamsArray.Count == 1) { diff --git a/src/SharpCompress/Archives/ArchiveFactory.cs b/src/SharpCompress/Archives/ArchiveFactory.cs index 7f1834d1..34cc5bb1 100644 --- a/src/SharpCompress/Archives/ArchiveFactory.cs +++ b/src/SharpCompress/Archives/ArchiveFactory.cs @@ -73,8 +73,7 @@ public static partial class ArchiveFactory public static IArchive OpenArchive(IReadOnlyList streams, ReaderOptions? options = null) { - var streamsArray = streams.RequireReadable(); - streamsArray.RequireSeekable(); + var streamsArray = streams.RequireReadable().RequireSeekable().ToList(); if (streamsArray.Count == 0) { throw new ArchiveOperationException("No streams"); diff --git a/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs b/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs index 9caa068e..2f5e5e33 100644 --- a/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs +++ b/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs @@ -76,8 +76,7 @@ public partial class GZipArchive ReaderOptions? readerOptions = null ) { - var strms = streams.RequireReadable(); - strms.RequireSeekable(); + var strms = streams.RequireReadable().RequireSeekable().ToList(); return new GZipArchive( new SourceStream( strms[0], diff --git a/src/SharpCompress/Archives/Rar/RarArchive.Factory.cs b/src/SharpCompress/Archives/Rar/RarArchive.Factory.cs index 31d53b0a..2c333c5c 100644 --- a/src/SharpCompress/Archives/Rar/RarArchive.Factory.cs +++ b/src/SharpCompress/Archives/Rar/RarArchive.Factory.cs @@ -87,8 +87,7 @@ public partial class RarArchive ReaderOptions? readerOptions = null ) { - var strms = streams.RequireReadable(); - strms.RequireSeekable(); + var strms = streams.RequireReadable().RequireSeekable().ToList(); return new RarArchive( new SourceStream( strms[0], diff --git a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.Factory.cs b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.Factory.cs index 161b0ed2..a338e363 100644 --- a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.Factory.cs +++ b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.Factory.cs @@ -71,8 +71,7 @@ public partial class SevenZipArchive ReaderOptions? readerOptions = null ) { - var strms = streams.RequireReadable(); - strms.RequireSeekable(); + var strms = streams.RequireReadable().RequireSeekable().ToList(); return new SevenZipArchive( new SourceStream( strms[0], diff --git a/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs b/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs index 9d60a6e8..d166f8c8 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs @@ -66,8 +66,7 @@ public partial class TarArchive ReaderOptions? readerOptions = null ) { - var strms = streams.RequireReadable(); - strms.RequireSeekable(); + var strms = streams.RequireReadable().RequireSeekable().ToList(); var sourceStream = new SourceStream( strms[0], i => i < strms.Count ? strms[i] : null, @@ -155,8 +154,7 @@ public partial class TarArchive ) { cancellationToken.ThrowIfCancellationRequested(); - var strms = streams.RequireReadable(); - strms.RequireSeekable(); + var strms = streams.RequireReadable().RequireSeekable().ToList(); var sourceStream = new SourceStream( strms[0], i => i < strms.Count ? strms[i] : null, diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs b/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs index a015272a..1e02ad6f 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs @@ -67,8 +67,7 @@ public partial class ZipArchive ReaderOptions? readerOptions = null ) { - var strms = streams.RequireReadable(); - strms.RequireSeekable(); + var strms = streams.RequireReadable().RequireSeekable().ToList(); return new ZipArchive( new SourceStream( strms[0], diff --git a/src/SharpCompress/StreamValidationExtensions.cs b/src/SharpCompress/StreamValidationExtensions.cs index 8c2b87db..28bd9116 100644 --- a/src/SharpCompress/StreamValidationExtensions.cs +++ b/src/SharpCompress/StreamValidationExtensions.cs @@ -1,13 +1,12 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; namespace SharpCompress; internal static class StreamValidationExtensions { - internal static Stream RequireReadable(this Stream stream) + internal static void RequireReadable(this Stream stream) { stream.NotNull(nameof(stream)); @@ -15,11 +14,9 @@ internal static class StreamValidationExtensions { throw new ArgumentException("Stream must be readable", nameof(stream)); } - - return stream; } - internal static Stream RequireSeekable(this Stream stream) + internal static void RequireSeekable(this Stream stream) { stream.NotNull(nameof(stream)); @@ -27,11 +24,9 @@ internal static class StreamValidationExtensions { throw new ArgumentException("Stream must be seekable", nameof(stream)); } - - return stream; } - internal static Stream RequireWritable(this Stream stream) + internal static void RequireWritable(this Stream stream) { stream.NotNull(nameof(stream)); @@ -39,32 +34,23 @@ internal static class StreamValidationExtensions { throw new ArgumentException("Stream must be writable", nameof(stream)); } - - return stream; } - internal static IReadOnlyList RequireSeekable(this IReadOnlyList streams) + internal static IEnumerable RequireSeekable(this IEnumerable streams) { - streams.NotNull(nameof(streams)); - foreach (var stream in streams) { stream.RequireSeekable(); + yield return stream; } - - return streams; } - internal static IReadOnlyList RequireReadable(this IEnumerable streams) + internal static IEnumerable RequireReadable(this IEnumerable streams) { - streams.NotNull(nameof(streams)); - - var streamArray = streams as IReadOnlyList ?? streams.ToArray(); - foreach (var stream in streamArray) + foreach (var stream in streams) { stream.RequireReadable(); + yield return stream; } - - return streamArray; } } diff --git a/src/SharpCompress/packages.lock.json b/src/SharpCompress/packages.lock.json index a401c702..e82196f8 100644 --- a/src/SharpCompress/packages.lock.json +++ b/src/SharpCompress/packages.lock.json @@ -268,9 +268,9 @@ "net10.0": { "Microsoft.NET.ILLink.Tasks": { "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "kICGrGYEzCNI3wPzfEXcwNHgTvlvVn9yJDhSdRK+oZQy4jvYH529u7O0xf5ocQKzOMjfS07+3z9PKRIjrFMJDA==" + "requested": "[10.0.6, )", + "resolved": "10.0.6", + "contentHash": "QKuvS0LWX4fjFqeDkyM7Kqt8P3wYTiPD4nwU+9y59n0sCiG714fxDgbbN82vDnzq89AF/PiHl92TP2C4aFDUQA==" }, "Microsoft.NETFramework.ReferenceAssemblies": { "type": "Direct", @@ -400,9 +400,9 @@ "net8.0": { "Microsoft.NET.ILLink.Tasks": { "type": "Direct", - "requested": "[8.0.22, )", - "resolved": "8.0.22", - "contentHash": "MhcMithKEiyyNkD2ZfbDZPmcOdi0GheGfg8saEIIEfD/fol3iHmcV8TsZkD4ZYz5gdUuoX4YtlVySUU7Sxl9SQ==" + "requested": "[8.0.26, )", + "resolved": "8.0.26", + "contentHash": "o7/yVssM2r9Wyln2s9edBd5ANZXqdSdBI+g7JqXkyJmXrhs2WsJp25K5yPnYrTgdKBCjKB8bg+O2oew4sgzFaA==" }, "Microsoft.NETFramework.ReferenceAssemblies": { "type": "Direct", diff --git a/tests/SharpCompress.Test/ReaderFactoryTests.cs b/tests/SharpCompress.Test/ReaderFactoryTests.cs index f77fb2f9..2c5236c8 100644 --- a/tests/SharpCompress.Test/ReaderFactoryTests.cs +++ b/tests/SharpCompress.Test/ReaderFactoryTests.cs @@ -34,6 +34,8 @@ public class ReaderFactoryTests using var unreadable = new TestStream(new MemoryStream(), false, true, true); using var readable = new MemoryStream(); - Assert.Throws(() => RarReader.OpenReader([unreadable, readable])); + Assert.Throws(() => + RarReader.OpenReader([unreadable, readable]).MoveToNextEntry() + ); } }