From be8841075a2ecc47d451ec9c569adf2ac953bbf2 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Thu, 29 Jan 2026 11:08:38 +0000 Subject: [PATCH] fixes --- src/SharpCompress/IO/NonDisposingStream.cs | 2 +- src/SharpCompress/Polyfills/StreamExtensions.cs | 5 +++-- src/SharpCompress/Readers/Rar/RarReader.cs | 10 ++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/SharpCompress/IO/NonDisposingStream.cs b/src/SharpCompress/IO/NonDisposingStream.cs index 35ddeb76..71175b87 100644 --- a/src/SharpCompress/IO/NonDisposingStream.cs +++ b/src/SharpCompress/IO/NonDisposingStream.cs @@ -33,7 +33,7 @@ internal class NonDisposingStream : Stream public override bool CanRead => !_isDisposed && _stream.CanRead; - public override bool CanSeek => !_isDisposed && _stream.CanSeek; + public override bool CanSeek => !_isDisposed && _stream.CanSeek && _stream is not RewindableStream; public override bool CanWrite => !_isDisposed && _stream.CanWrite; diff --git a/src/SharpCompress/Polyfills/StreamExtensions.cs b/src/SharpCompress/Polyfills/StreamExtensions.cs index 6803e1e0..aec6ce86 100644 --- a/src/SharpCompress/Polyfills/StreamExtensions.cs +++ b/src/SharpCompress/Polyfills/StreamExtensions.cs @@ -3,6 +3,7 @@ using System.Buffers; using System.IO; using System.Threading; using System.Threading.Tasks; +using SharpCompress.IO; namespace SharpCompress; @@ -12,13 +13,13 @@ public static class StreamExtensions { public void Skip(long advanceAmount) { - if (stream.CanSeek) + if (stream.CanSeek && stream is not RewindableStream) { stream.Position += advanceAmount; return; } - using var readOnlySubStream = new IO.ReadOnlySubStream(stream, advanceAmount); + using var readOnlySubStream = new ReadOnlySubStream(stream, advanceAmount); readOnlySubStream.CopyTo(Stream.Null); } diff --git a/src/SharpCompress/Readers/Rar/RarReader.cs b/src/SharpCompress/Readers/Rar/RarReader.cs index 949263d8..cd0aebc9 100644 --- a/src/SharpCompress/Readers/Rar/RarReader.cs +++ b/src/SharpCompress/Readers/Rar/RarReader.cs @@ -97,6 +97,16 @@ public abstract partial class RarReader : AbstractReader GetEntriesAsync(Stream stream) + { + volume = new RarReaderVolume(stream, Options, 0); + await foreach (var fp in volume.ReadFilePartsAsync()) + { + ValidateArchive(volume); + yield return new RarReaderEntry(volume.IsSolidArchive, fp); + } + } + protected virtual IEnumerable CreateFilePartEnumerableForCurrentEntry() => Entry.Parts;