Check crc on tar header

This commit is contained in:
Lars Vahlenberg 2024-07-10 19:53:32 +02:00
parent d18cad6d76
commit e42d953f47
3 changed files with 16 additions and 2 deletions

View file

@ -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);

View file

@ -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<InvalidOperationException>(() => 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);
}
}

Binary file not shown.