diff --git a/src/SharpCompress/Archives/Tar/TarArchive.cs b/src/SharpCompress/Archives/Tar/TarArchive.cs index 961c1f6e..2ac7ce44 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.cs @@ -75,9 +75,10 @@ namespace SharpCompress.Archives.Tar { try { - TarHeader tar = new TarHeader(new ArchiveEncoding()); - tar.Read(new BinaryReader(stream)); - return tar.Name.Length > 0 && Enum.IsDefined(typeof(EntryType), tar.EntryType); + TarHeader tarHeader = new TarHeader(new ArchiveEncoding()); + bool readSucceeded = tarHeader.Read(new BinaryReader(stream)); + bool isEmptyArchive = tarHeader.Name.Length == 0 && tarHeader.Size == 0 && Enum.IsDefined(typeof(EntryType), tarHeader.EntryType); + return readSucceeded || isEmptyArchive; } catch { diff --git a/tests/SharpCompress.Test/Tar/TarArchiveTests.cs b/tests/SharpCompress.Test/Tar/TarArchiveTests.cs index 4e677abb..bf6946e9 100644 --- a/tests/SharpCompress.Test/Tar/TarArchiveTests.cs +++ b/tests/SharpCompress.Test/Tar/TarArchiveTests.cs @@ -155,5 +155,16 @@ namespace SharpCompress.Test.Tar Assert.True(archive.Type == ArchiveType.Tar); } } + + [Fact] + public void Tar_Empty_Archive() + { + string archiveFullPath = Path.Combine(TEST_ARCHIVES_PATH, "Tar.Empty.tar"); + using (Stream stream = File.OpenRead(archiveFullPath)) + using (IArchive archive = ArchiveFactory.Open(stream)) + { + Assert.True(archive.Type == ArchiveType.Tar); + } + } } } diff --git a/tests/TestArchives/Archives/Tar.Empty.tar b/tests/TestArchives/Archives/Tar.Empty.tar new file mode 100644 index 00000000..9df64990 Binary files /dev/null and b/tests/TestArchives/Archives/Tar.Empty.tar differ