Merge pull request #784 from Erior/feature/rar-comment

Dont crash on reading rar5 comment #783
This commit is contained in:
Adam Hathcock
2023-12-11 08:44:01 +00:00
committed by GitHub
5 changed files with 16 additions and 6 deletions

View File

@@ -105,7 +105,14 @@ public class RarHeaderFactory
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;
}

View File

@@ -2,6 +2,7 @@ using System;
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 @@ public abstract class RarVolume : Volume
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;

View File

@@ -284,6 +284,12 @@ public class RarReaderTests : ReaderTests
[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);

Binary file not shown.

Binary file not shown.