diff --git a/src/SharpCompress/Factories/ArjFactory.cs b/src/SharpCompress/Factories/ArjFactory.cs index 7499946be..4b9fc5bb9 100644 --- a/src/SharpCompress/Factories/ArjFactory.cs +++ b/src/SharpCompress/Factories/ArjFactory.cs @@ -28,12 +28,19 @@ public override bool IsArchive( int bufferSize = ReaderOptions.DefaultBufferSize ) { - var arjHeader = new ArjMainHeader(new ArchiveEncoding()); - if (arjHeader.Read(stream) == null) + try + { + var arjHeader = new ArjMainHeader(new ArchiveEncoding()); + if (arjHeader.Read(stream) == null) + { + return false; + } + return true; + } + catch { return false; } - return true; } public IReader OpenReader(Stream stream, ReaderOptions? options) => diff --git a/src/SharpCompress/SharpCompress.csproj b/src/SharpCompress/SharpCompress.csproj index 27ec5e3ef..40f83f693 100644 --- a/src/SharpCompress/SharpCompress.csproj +++ b/src/SharpCompress/SharpCompress.csproj @@ -2,9 +2,9 @@ SharpCompress - Pure C# Decompression/Compression en-US - 0.42.0 - 0.42.0 - 0.42.0 + 0.42.1 + 0.42.1 + 0.42.1 Adam Hathcock net48;net481;netstandard2.0;net6.0;net8.0 SharpCompress diff --git a/tests/SharpCompress.Test/ArchiveTests.cs b/tests/SharpCompress.Test/ArchiveTests.cs index 2f47e1215..84db62f1e 100644 --- a/tests/SharpCompress.Test/ArchiveTests.cs +++ b/tests/SharpCompress.Test/ArchiveTests.cs @@ -654,4 +654,31 @@ public void ArchiveFactory_Open_WithRawFileStream() Assert.Equal(3, archive.Entries.Count()); } } + + [Fact] + public void ArchiveFactory_IsArchive_NonArchiveFile_ShouldReturnFalse() + { + // Test that ArchiveFactory.IsArchive returns false instead of throwing + // when called on a non-archive file (regression test for issue #1064) + using (var stream = new MemoryStream(new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04 })) + { + var result = ArchiveFactory.IsArchive(stream, out var type); + Assert.False(result); + Assert.Null(type); + } + } + + [Fact] + public void ArchiveFactory_IsArchive_ValidArchive_ShouldReturnTrue() + { + // Test that ArchiveFactory.IsArchive correctly identifies valid archives + var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "Zip.bzip2.noEmptyDirs.zip"); + + using (var stream = File.OpenRead(testArchive)) + { + var result = ArchiveFactory.IsArchive(stream, out var type); + Assert.True(result); + Assert.Equal(ArchiveType.Zip, type); + } + } }