Merge pull request #729 from TwanVanDongen/master

Fixed support for RAR 1.5 (algo15)
This commit is contained in:
Adam Hathcock
2023-03-01 08:56:40 +00:00
committed by GitHub
4 changed files with 33 additions and 5 deletions

View File

@@ -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.
/// </summary>
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

View File

@@ -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()
{

View File

@@ -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<string, string> 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));

Binary file not shown.