diff --git a/src/SharpCompress/Common/Rar/Headers/RarHeaderFactory.cs b/src/SharpCompress/Common/Rar/Headers/RarHeaderFactory.cs index d371166d..de44e309 100644 --- a/src/SharpCompress/Common/Rar/Headers/RarHeaderFactory.cs +++ b/src/SharpCompress/Common/Rar/Headers/RarHeaderFactory.cs @@ -105,7 +105,14 @@ public IEnumerable ReadHeaders(Stream stream) case HeaderCodeV.RAR5_SERVICE_HEADER: { var fh = new FileHeader(header, reader, HeaderType.Service); - SkipData(fh, reader); + if (fh.FileName == "CMT") + { + fh.PackedStream = new ReadOnlySubStream(reader.BaseStream, fh.CompressedSize); + } + else + { + SkipData(fh, reader); + } return fh; } diff --git a/src/SharpCompress/Common/Rar/RarVolume.cs b/src/SharpCompress/Common/Rar/RarVolume.cs index 078e3ffe..da42ff24 100644 --- a/src/SharpCompress/Common/Rar/RarVolume.cs +++ b/src/SharpCompress/Common/Rar/RarVolume.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text; using SharpCompress.Common.Rar.Headers; using SharpCompress.IO; using SharpCompress.Readers; @@ -70,11 +71,7 @@ internal IEnumerable GetVolumeFileParts() var part = CreateFilePart(lastMarkHeader!, fh); var buffer = new byte[fh.CompressedSize]; part.GetCompressedStream().Read(buffer, 0, buffer.Length); - Comment = System - .Text - .Encoding - .UTF8 - .GetString(buffer, 0, buffer.Length - 1); + Comment = Encoding.UTF8.GetString(buffer, 0, buffer.Length - 1); } } break; diff --git a/tests/SharpCompress.Test/Rar/RarReaderTests.cs b/tests/SharpCompress.Test/Rar/RarReaderTests.cs index 097b0fc8..1fdbeef9 100644 --- a/tests/SharpCompress.Test/Rar/RarReaderTests.cs +++ b/tests/SharpCompress.Test/Rar/RarReaderTests.cs @@ -284,6 +284,12 @@ public void Rar_Jpg_Reader() [Fact] public void Rar_Solid_Reader() => Read("Rar.solid.rar", CompressionType.Rar); + [Fact] + public void Rar_Comment_Reader() => Read("Rar.comment.rar", CompressionType.Rar); + + [Fact] + public void Rar5_Comment_Reader() => Read("Rar5.comment.rar", CompressionType.Rar); + [Fact] public void Rar5_Solid_Reader() => Read("Rar5.solid.rar", CompressionType.Rar); diff --git a/tests/TestArchives/Archives/Rar.comment.rar b/tests/TestArchives/Archives/Rar.comment.rar new file mode 100644 index 00000000..b0a909c7 Binary files /dev/null and b/tests/TestArchives/Archives/Rar.comment.rar differ diff --git a/tests/TestArchives/Archives/Rar5.comment.rar b/tests/TestArchives/Archives/Rar5.comment.rar new file mode 100644 index 00000000..d3a65de9 Binary files /dev/null and b/tests/TestArchives/Archives/Rar5.comment.rar differ