diff --git a/src/SharpCompress/Common/SevenZip/SevenZipFilePart.cs b/src/SharpCompress/Common/SevenZip/SevenZipFilePart.cs index 7e6ad5b0..156d3e71 100644 --- a/src/SharpCompress/Common/SevenZip/SevenZipFilePart.cs +++ b/src/SharpCompress/Common/SevenZip/SevenZipFilePart.cs @@ -67,6 +67,7 @@ internal class SevenZipFilePart : FilePart } } + private const uint K_COPY = 0x0; private const uint K_LZMA2 = 0x21; private const uint K_LZMA = 0x030101; private const uint K_PPMD = 0x030401; @@ -82,6 +83,7 @@ internal class SevenZipFilePart : FilePart var coder = Folder.NotNull()._coders.First(); return coder._methodId._id switch { + K_COPY => CompressionType.None, K_LZMA or K_LZMA2 => CompressionType.LZMA, K_PPMD => CompressionType.PPMd, K_B_ZIP2 => CompressionType.BZip2, diff --git a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs index b52d4bc2..82919586 100644 --- a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs +++ b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs @@ -122,6 +122,25 @@ public class SevenZipArchiveTests : ArchiveTests //"7Zip.BZip2.split.006", //"7Zip.BZip2.split.007" + [Fact] + public void SevenZipArchive_Copy_StreamRead() => ArchiveStreamRead("7Zip.Copy.7z"); + + [Fact] + public void SevenZipArchive_Copy_PathRead() => ArchiveFileRead("7Zip.Copy.7z"); + + [Fact] + public void SevenZipArchive_Copy_CompressionType() + { + using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "7Zip.Copy.7z"))) + using (var archive = SevenZipArchive.Open(stream)) + { + foreach (var entry in archive.Entries.Where(e => !e.IsDirectory)) + { + Assert.Equal(CompressionType.None, entry.CompressionType); + } + } + } + [Fact] public void SevenZipArchive_ZSTD_StreamRead() => ArchiveStreamRead("7Zip.ZSTD.7z"); diff --git a/tests/TestArchives/Archives/7Zip.Copy.7z b/tests/TestArchives/Archives/7Zip.Copy.7z new file mode 100644 index 00000000..6143ec0d Binary files /dev/null and b/tests/TestArchives/Archives/7Zip.Copy.7z differ