Skip to content

Commit 41c4263

Browse files
authored
Merge pull request #1067 from adamhathcock/adam/fix-arj-factory
Fix: Should not throw on ARJ detection
2 parents 30e036f + 2215d60 commit 41c4263

3 files changed

Lines changed: 40 additions & 6 deletions

File tree

src/SharpCompress/Factories/ArjFactory.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,19 @@ public override bool IsArchive(
2828
int bufferSize = ReaderOptions.DefaultBufferSize
2929
)
3030
{
31-
var arjHeader = new ArjMainHeader(new ArchiveEncoding());
32-
if (arjHeader.Read(stream) == null)
31+
try
32+
{
33+
var arjHeader = new ArjMainHeader(new ArchiveEncoding());
34+
if (arjHeader.Read(stream) == null)
35+
{
36+
return false;
37+
}
38+
return true;
39+
}
40+
catch
3341
{
3442
return false;
3543
}
36-
return true;
3744
}
3845

3946
public IReader OpenReader(Stream stream, ReaderOptions? options) =>

src/SharpCompress/SharpCompress.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<PropertyGroup>
33
<AssemblyTitle>SharpCompress - Pure C# Decompression/Compression</AssemblyTitle>
44
<NeutralLanguage>en-US</NeutralLanguage>
5-
<VersionPrefix>0.42.0</VersionPrefix>
6-
<AssemblyVersion>0.42.0</AssemblyVersion>
7-
<FileVersion>0.42.0</FileVersion>
5+
<VersionPrefix>0.42.1</VersionPrefix>
6+
<AssemblyVersion>0.42.1</AssemblyVersion>
7+
<FileVersion>0.42.1</FileVersion>
88
<Authors>Adam Hathcock</Authors>
99
<TargetFrameworks>net48;net481;netstandard2.0;net6.0;net8.0</TargetFrameworks>
1010
<AssemblyName>SharpCompress</AssemblyName>

tests/SharpCompress.Test/ArchiveTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,4 +654,31 @@ public void ArchiveFactory_Open_WithRawFileStream()
654654
Assert.Equal(3, archive.Entries.Count());
655655
}
656656
}
657+
658+
[Fact]
659+
public void ArchiveFactory_IsArchive_NonArchiveFile_ShouldReturnFalse()
660+
{
661+
// Test that ArchiveFactory.IsArchive returns false instead of throwing
662+
// when called on a non-archive file (regression test for issue #1064)
663+
using (var stream = new MemoryStream(new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04 }))
664+
{
665+
var result = ArchiveFactory.IsArchive(stream, out var type);
666+
Assert.False(result);
667+
Assert.Null(type);
668+
}
669+
}
670+
671+
[Fact]
672+
public void ArchiveFactory_IsArchive_ValidArchive_ShouldReturnTrue()
673+
{
674+
// Test that ArchiveFactory.IsArchive correctly identifies valid archives
675+
var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "Zip.bzip2.noEmptyDirs.zip");
676+
677+
using (var stream = File.OpenRead(testArchive))
678+
{
679+
var result = ArchiveFactory.IsArchive(stream, out var type);
680+
Assert.True(result);
681+
Assert.Equal(ArchiveType.Zip, type);
682+
}
683+
}
657684
}

0 commit comments

Comments
 (0)