Check crc on tar header
This commit is contained in:
parent
d18cad6d76
commit
e42d953f47
3 changed files with 16 additions and 2 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
BIN
tests/TestArchives/Archives/false.positive.tar
Normal file
BIN
tests/TestArchives/Archives/false.positive.tar
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue