diff --git a/src/SharpCompress/Common/Rar/RarCryptoWrapper.cs b/src/SharpCompress/Common/Rar/RarCryptoWrapper.cs index e92056b4..a1cee046 100644 --- a/src/SharpCompress/Common/Rar/RarCryptoWrapper.cs +++ b/src/SharpCompress/Common/Rar/RarCryptoWrapper.cs @@ -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(); diff --git a/src/SharpCompress/Readers/AbstractReader.cs b/src/SharpCompress/Readers/AbstractReader.cs index 86150744..f45da630 100644 --- a/src/SharpCompress/Readers/AbstractReader.cs +++ b/src/SharpCompress/Readers/AbstractReader.cs @@ -129,7 +129,7 @@ public abstract class AbstractReader : 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(); diff --git a/src/SharpCompress/Readers/Rar/NonSeekableStreamFilePart.cs b/src/SharpCompress/Readers/Rar/NonSeekableStreamFilePart.cs index 09753b95..3a43e60c 100644 --- a/src/SharpCompress/Readers/Rar/NonSeekableStreamFilePart.cs +++ b/src/SharpCompress/Readers/Rar/NonSeekableStreamFilePart.cs @@ -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; } diff --git a/tests/SharpCompress.Test/Rar/RarReaderTests.cs b/tests/SharpCompress.Test/Rar/RarReaderTests.cs index 45744270..19b4ddb8 100644 --- a/tests/SharpCompress.Test/Rar/RarReaderTests.cs +++ b/tests/SharpCompress.Test/Rar/RarReaderTests.cs @@ -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()) + { + // + } + } + } }