human fix

This commit is contained in:
Adam Hathcock
2026-04-23 11:43:10 +01:00
parent c9a68593ea
commit 41432ab062
10 changed files with 25 additions and 50 deletions

View File

@@ -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)
{

View File

@@ -73,8 +73,7 @@ public static partial class ArchiveFactory
public static IArchive OpenArchive(IReadOnlyList<Stream> 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");

View File

@@ -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],

View File

@@ -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],

View File

@@ -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],

View File

@@ -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,

View File

@@ -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],

View File

@@ -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<Stream> RequireSeekable(this IReadOnlyList<Stream> streams)
internal static IEnumerable<Stream> RequireSeekable(this IEnumerable<Stream> streams)
{
streams.NotNull(nameof(streams));
foreach (var stream in streams)
{
stream.RequireSeekable();
yield return stream;
}
return streams;
}
internal static IReadOnlyList<Stream> RequireReadable(this IEnumerable<Stream> streams)
internal static IEnumerable<Stream> RequireReadable(this IEnumerable<Stream> streams)
{
streams.NotNull(nameof(streams));
var streamArray = streams as IReadOnlyList<Stream> ?? streams.ToArray();
foreach (var stream in streamArray)
foreach (var stream in streams)
{
stream.RequireReadable();
yield return stream;
}
return streamArray;
}
}

View File

@@ -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",

View File

@@ -34,6 +34,8 @@ public class ReaderFactoryTests
using var unreadable = new TestStream(new MemoryStream(), false, true, true);
using var readable = new MemoryStream();
Assert.Throws<ArgumentException>(() => RarReader.OpenReader([unreadable, readable]));
Assert.Throws<ArgumentException>(() =>
RarReader.OpenReader([unreadable, readable]).MoveToNextEntry()
);
}
}