Skip if we know the size, set blank password if not set for rar

This commit is contained in:
Lars Vahlenberg
2023-06-06 22:27:53 +02:00
parent b52a899a18
commit 6bf6e51740
4 changed files with 44 additions and 2 deletions

View File

@@ -15,7 +15,7 @@ internal sealed class RarCryptoWrapper : Stream
{
_actualStream = actualStream;
_salt = salt;
_rijndael = RarRijndael.InitializeFrom(password, salt);
_rijndael = RarRijndael.InitializeFrom(password ?? "", salt);
}
public override void Flush() => throw new NotSupportedException();

View File

@@ -129,7 +129,7 @@ public abstract class AbstractReader<TEntry, TVolume> : IReader, IReaderExtracti
{
var part = Entry.Parts.First();
if (ArchiveType != ArchiveType.Rar && !Entry.IsSolid && Entry.CompressedSize > 0)
if ( !Entry.IsSolid && Entry.CompressedSize > 0)
{
//not solid and has a known compressed size then we can skip raw bytes.
var rawStream = part.GetRawStream();

View File

@@ -11,5 +11,7 @@ internal class NonSeekableStreamFilePart : RarFilePart
internal override Stream GetCompressedStream() => FileHeader.PackedStream;
internal override Stream? GetRawStream() => FileHeader.PackedStream;
internal override string FilePartName => "Unknown Stream - File Entry: " + FileHeader.FileName;
}

View File

@@ -332,4 +332,44 @@ public class RarReaderTests : ReaderTests
}
}
}
[Fact]
public void Rar_NullReference()
{
{
var archives = new[]
{
"Rar.EncryptedParts.part01.rar",
"Rar.EncryptedParts.part02.rar",
"Rar.EncryptedParts.part03.rar",
"Rar.EncryptedParts.part04.rar",
"Rar.EncryptedParts.part05.rar",
"Rar.EncryptedParts.part06.rar"
};
using (
var reader = RarReader.Open(
archives
.Select(s => Path.Combine(TEST_ARCHIVES_PATH, s))
.Select(p => File.OpenRead(p)),
new ReaderOptions() { Password = "test" }
)
)
{
while (reader.MoveToNextEntry())
{
//
}
}
}
{
using var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Rar.encrypted_filesOnly.rar"));
using var reader = ReaderFactory.Open(stream, new ReaderOptions() { LookForHeader = true });
while (reader.MoveToNextEntry())
{
//
}
}
}
}