From a88390a546214af66c73e22ab5a24c41ee5273b4 Mon Sep 17 00:00:00 2001 From: Simon Cahill Date: Mon, 21 Jul 2025 15:34:03 +0200 Subject: [PATCH 1/3] Added ArgumentException which is thrown when a non-seekable Stream instance is passed --- .../Archives/GZip/GZipArchive.cs | 6 ++++++ src/SharpCompress/Archives/Rar/RarArchive.cs | 6 ++++++ .../Archives/SevenZip/SevenZipArchive.cs | 6 ++++++ src/SharpCompress/Archives/Tar/TarArchive.cs | 6 ++++++ src/SharpCompress/Archives/Zip/ZipArchive.cs | 6 ++++++ .../Common/Tar/TarHeaderFactory.cs | 3 ++- src/SharpCompress/packages.lock.json | 20 ++++++++++++++++--- 7 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/SharpCompress/Archives/GZip/GZipArchive.cs b/src/SharpCompress/Archives/GZip/GZipArchive.cs index 58f98ab9..4437ff57 100644 --- a/src/SharpCompress/Archives/GZip/GZipArchive.cs +++ b/src/SharpCompress/Archives/GZip/GZipArchive.cs @@ -89,6 +89,12 @@ public class GZipArchive : AbstractWritableArchive public static GZipArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.CheckNotNull(nameof(stream)); + + if (stream is not { CanSeek: true }) + { + throw new ArgumentException("Stream must be seekable", nameof(stream)); + } + return new GZipArchive( new SourceStream(stream, _ => null, readerOptions ?? new ReaderOptions()) ); diff --git a/src/SharpCompress/Archives/Rar/RarArchive.cs b/src/SharpCompress/Archives/Rar/RarArchive.cs index d84d0edc..ee4be60e 100644 --- a/src/SharpCompress/Archives/Rar/RarArchive.cs +++ b/src/SharpCompress/Archives/Rar/RarArchive.cs @@ -131,6 +131,12 @@ public class RarArchive : AbstractArchive public static RarArchive Open(Stream stream, ReaderOptions? options = null) { stream.CheckNotNull(nameof(stream)); + + if (stream is not { CanSeek: true }) + { + throw new ArgumentException("Stream must be seekable", nameof(stream)); + } + return new RarArchive(new SourceStream(stream, _ => null, options ?? new ReaderOptions())); } diff --git a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs index eabc317e..323f07ac 100644 --- a/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs +++ b/src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs @@ -92,6 +92,12 @@ public class SevenZipArchive : AbstractArchive null, readerOptions ?? new ReaderOptions()) ); diff --git a/src/SharpCompress/Archives/Tar/TarArchive.cs b/src/SharpCompress/Archives/Tar/TarArchive.cs index fdf8cd42..2c9c64c7 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.cs @@ -90,6 +90,12 @@ public class TarArchive : AbstractWritableArchive public static TarArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.CheckNotNull(nameof(stream)); + + if (stream is not { CanSeek: true }) + { + throw new ArgumentException("Stream must be seekable", nameof(stream)); + } + return new TarArchive( new SourceStream(stream, i => null, readerOptions ?? new ReaderOptions()) ); diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.cs b/src/SharpCompress/Archives/Zip/ZipArchive.cs index 85130f70..79cdcf3e 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.cs @@ -111,6 +111,12 @@ public class ZipArchive : AbstractWritableArchive public static ZipArchive Open(Stream stream, ReaderOptions? readerOptions = null) { stream.CheckNotNull(nameof(stream)); + + if (stream is not { CanSeek: true }) + { + throw new ArgumentException("Stream must be seekable", nameof(stream)); + } + return new ZipArchive( new SourceStream(stream, i => null, readerOptions ?? new ReaderOptions()) ); diff --git a/src/SharpCompress/Common/Tar/TarHeaderFactory.cs b/src/SharpCompress/Common/Tar/TarHeaderFactory.cs index 13813353..c7fbd195 100644 --- a/src/SharpCompress/Common/Tar/TarHeaderFactory.cs +++ b/src/SharpCompress/Common/Tar/TarHeaderFactory.cs @@ -46,8 +46,9 @@ internal static class TarHeaderFactory } } } - catch + catch (System.Exception ex) { + System.Diagnostics.Debug.WriteLine(ex); header = null; } yield return header; diff --git a/src/SharpCompress/packages.lock.json b/src/SharpCompress/packages.lock.json index b0c97ca6..7f1121ab 100644 --- a/src/SharpCompress/packages.lock.json +++ b/src/SharpCompress/packages.lock.json @@ -2,6 +2,15 @@ "version": 2, "dependencies": { ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -34,6 +43,11 @@ "resolved": "8.0.0", "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" }, + "Microsoft.NETFramework.ReferenceAssemblies.net48": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" + }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", @@ -307,9 +321,9 @@ "net8.0": { "Microsoft.NET.ILLink.Tasks": { "type": "Direct", - "requested": "[8.0.16, )", - "resolved": "8.0.16", - "contentHash": "0H1QaKpVibe++Zx6EYJQGhrpfz2bBPGiQ7Rpsmx8I3+oKv+ZRRIfVfmcj50KuZlhhRE6V02y5bUjP+V2oPM2ng==" + "requested": "[8.0.17, )", + "resolved": "8.0.17", + "contentHash": "x5/y4l8AtshpBOrCZdlE4txw8K3e3s9meBFeZeR3l8hbbku2V7kK6ojhXvrbjg1rk3G+JqL1BI26gtgc1ZrdUw==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", From d810f8d8db145e99b72b02931e12b9162e923bf2 Mon Sep 17 00:00:00 2001 From: Simon Cahill Date: Mon, 21 Jul 2025 15:38:14 +0200 Subject: [PATCH 2/3] Reverted back; I don't know how this file changed --- src/SharpCompress/packages.lock.json | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/src/SharpCompress/packages.lock.json b/src/SharpCompress/packages.lock.json index 7f1121ab..116a1190 100644 --- a/src/SharpCompress/packages.lock.json +++ b/src/SharpCompress/packages.lock.json @@ -2,15 +2,6 @@ "version": 2, "dependencies": { ".NETFramework,Version=v4.8": { - "Microsoft.NETFramework.ReferenceAssemblies": { - "type": "Direct", - "requested": "[1.0.3, )", - "resolved": "1.0.3", - "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", - "dependencies": { - "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" - } - }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[8.0.0, )", @@ -43,11 +34,6 @@ "resolved": "8.0.0", "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" }, - "Microsoft.NETFramework.ReferenceAssemblies.net48": { - "type": "Transitive", - "resolved": "1.0.3", - "contentHash": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==" - }, "Microsoft.SourceLink.Common": { "type": "Transitive", "resolved": "8.0.0", @@ -321,9 +307,9 @@ "net8.0": { "Microsoft.NET.ILLink.Tasks": { "type": "Direct", - "requested": "[8.0.17, )", - "resolved": "8.0.17", - "contentHash": "x5/y4l8AtshpBOrCZdlE4txw8K3e3s9meBFeZeR3l8hbbku2V7kK6ojhXvrbjg1rk3G+JqL1BI26gtgc1ZrdUw==" + "requested": "[8.0.16, )", + "resolved": "8.0.16", + "contentHash": "0H1QaKpVibe++Zx6EYJQGhrpfz2bBPGiQ7Rpsmx8I3+oKv+ZRRIfVfmcj50KuZlhhRE6V02y5bUjP+V2oPM2ng==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", @@ -359,4 +345,4 @@ } } } -} \ No newline at end of file +} From c0ae319c63fc27193f534d091221b20894f0faa7 Mon Sep 17 00:00:00 2001 From: Simon Cahill Date: Mon, 21 Jul 2025 15:41:33 +0200 Subject: [PATCH 3/3] Reverted debug change --- src/SharpCompress/Common/Tar/TarHeaderFactory.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SharpCompress/Common/Tar/TarHeaderFactory.cs b/src/SharpCompress/Common/Tar/TarHeaderFactory.cs index c7fbd195..13813353 100644 --- a/src/SharpCompress/Common/Tar/TarHeaderFactory.cs +++ b/src/SharpCompress/Common/Tar/TarHeaderFactory.cs @@ -46,9 +46,8 @@ internal static class TarHeaderFactory } } } - catch (System.Exception ex) + catch { - System.Diagnostics.Debug.WriteLine(ex); header = null; } yield return header;