From e42d953f47e2339c03e663cdff5015d61873dcea Mon Sep 17 00:00:00 2001 From: Lars Vahlenberg Date: Wed, 10 Jul 2024 19:53:32 +0200 Subject: [PATCH] Check crc on tar header --- .../Common/Tar/Headers/TarHeader.cs | 7 +++++++ tests/SharpCompress.Test/Tar/TarArchiveTests.cs | 11 +++++++++-- tests/TestArchives/Archives/false.positive.tar | Bin 0 -> 1024 bytes 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/TestArchives/Archives/false.positive.tar diff --git a/src/SharpCompress/Common/Tar/Headers/TarHeader.cs b/src/SharpCompress/Common/Tar/Headers/TarHeader.cs index e9aa343c..510d38a0 100644 --- a/src/SharpCompress/Common/Tar/Headers/TarHeader.cs +++ b/src/SharpCompress/Common/Tar/Headers/TarHeader.cs @@ -134,6 +134,13 @@ internal sealed class TarHeader hasLongValue = false; } while (hasLongValue); + var crc = ReadAsciiInt64Base8(buffer, 148, 7); + + if (crc != RecalculateChecksum(buffer)) + { + return false; + } + Name = longName ?? ArchiveEncoding.Decode(buffer, 0, 100).TrimNulls(); EntryType = entryType; Size = ReadSize(buffer); diff --git a/tests/SharpCompress.Test/Tar/TarArchiveTests.cs b/tests/SharpCompress.Test/Tar/TarArchiveTests.cs index bbf96c00..6a8f3294 100644 --- a/tests/SharpCompress.Test/Tar/TarArchiveTests.cs +++ b/tests/SharpCompress.Test/Tar/TarArchiveTests.cs @@ -217,8 +217,7 @@ public class TarArchiveTests : ArchiveTests { var archiveFullPath = Path.Combine(TEST_ARCHIVES_PATH, "Tar.Empty.tar"); using Stream stream = File.OpenRead(archiveFullPath); - using var archive = ArchiveFactory.Open(stream); - Assert.True(archive.Type == ArchiveType.Tar); + Assert.Throws(() => ArchiveFactory.Open(stream)); } [Theory] @@ -287,4 +286,12 @@ public class TarArchiveTests : ArchiveTests Assert.Equal(2, numberOfEntries); } + + [Fact] + public void Tar_Detect_Test() + { + var isTar = TarArchive.IsTarFile(Path.Combine(TEST_ARCHIVES_PATH, "false.positive.tar")); + + Assert.False(isTar); + } } diff --git a/tests/TestArchives/Archives/false.positive.tar b/tests/TestArchives/Archives/false.positive.tar new file mode 100644 index 0000000000000000000000000000000000000000..db91a2ff2657cb03d7538bb306d0b9816837fb6a GIT binary patch literal 1024 zcmdmZ+NXyB2)IE65X`MMWncu-s$d=img#Z90vk52w literal 0 HcmV?d00001