diff --git a/src/SharpCompress/Common/Rar/RarEntry.cs b/src/SharpCompress/Common/Rar/RarEntry.cs index f3614a40..7f280e4a 100644 --- a/src/SharpCompress/Common/Rar/RarEntry.cs +++ b/src/SharpCompress/Common/Rar/RarEntry.cs @@ -1,4 +1,4 @@ -using System; +using System; using SharpCompress.Common.Rar.Headers; namespace SharpCompress.Common.Rar; @@ -11,7 +11,8 @@ public abstract class RarEntry : Entry /// As the V2017 port isn't complete, add this check to use the legacy Rar code. /// internal bool IsRarV3 => - FileHeader.CompressionAlgorithm == 20 + FileHeader.CompressionAlgorithm == 15 + || FileHeader.CompressionAlgorithm == 20 || FileHeader.CompressionAlgorithm == 26 || FileHeader.CompressionAlgorithm == 29 || FileHeader.CompressionAlgorithm == 36; //Nanook - Added 20+26 as Test arc from WinRar2.8 (algo 20) was failing with 2017 code diff --git a/tests/SharpCompress.Test/Rar/RarArchiveTests.cs b/tests/SharpCompress.Test/Rar/RarArchiveTests.cs index 0936a8ed..1e345150 100644 --- a/tests/SharpCompress.Test/Rar/RarArchiveTests.cs +++ b/tests/SharpCompress.Test/Rar/RarArchiveTests.cs @@ -355,6 +355,22 @@ public class RarArchiveTests : ArchiveTests [Fact] public void Rar2_ArchiveFileRead() => ArchiveFileRead("Rar2.rar"); + [Fact] + public void Rar15_ArchiveFileRead() + { + UseExtensionInsteadOfNameToVerify = true; + UseCaseInsensitiveToVerify= true; + ArchiveFileRead("Rar15.rar"); + } + [Fact] + public void Rar15_ArchiveVersionTest() + { + var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "Rar15.rar"); + + using var archive = RarArchive.Open(testArchive); + Assert.Equal(1, archive.MinVersion); + Assert.Equal(1, archive.MaxVersion); + } [Fact] public void Rar2_ArchiveVersionTest() { diff --git a/tests/SharpCompress.Test/TestBase.cs b/tests/SharpCompress.Test/TestBase.cs index ddfd0096..3ad1fe79 100644 --- a/tests/SharpCompress.Test/TestBase.cs +++ b/tests/SharpCompress.Test/TestBase.cs @@ -138,12 +138,23 @@ public class TestBase : IDisposable } protected bool UseExtensionInsteadOfNameToVerify { get; set; } + protected bool UseCaseInsensitiveToVerify { get; set; } protected void VerifyFilesByExtension() { - var extracted = Directory - .EnumerateFiles(SCRATCH_FILES_PATH, "*.*", SearchOption.AllDirectories) - .ToLookup(path => Path.GetExtension(path)); + ILookup extracted; + if (UseCaseInsensitiveToVerify) + { + extracted = Directory + .EnumerateFiles(SCRATCH_FILES_PATH, "*.*", SearchOption.AllDirectories) + .ToLookup(path => Path.GetExtension(path).ToLowerInvariant()); + } + else + { + extracted = Directory + .EnumerateFiles(SCRATCH_FILES_PATH, "*.*", SearchOption.AllDirectories) + .ToLookup(path => Path.GetExtension(path)); + } var original = Directory .EnumerateFiles(ORIGINAL_FILES_PATH, "*.*", SearchOption.AllDirectories) .ToLookup(path => Path.GetExtension(path)); diff --git a/tests/TestArchives/Archives/Rar15.rar b/tests/TestArchives/Archives/Rar15.rar new file mode 100644 index 00000000..dfd42bf0 Binary files /dev/null and b/tests/TestArchives/Archives/Rar15.rar differ