From 2e533f9fb5f2668eb2a092bff0a33ca8cd05a7fe Mon Sep 17 00:00:00 2001 From: Strachu Date: Mon, 15 Dec 2014 21:13:57 +0100 Subject: [PATCH] Fixed handling of ustar tar files with long names. --- SharpCompress.Test/Tar/TarArchiveTests.cs | 16 ++++++++++++++++ SharpCompress/Common/Tar/Headers/TarHeader.cs | 2 +- TestArchives/Archives/ustar with long names.tar | Bin 0 -> 5632 bytes 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 TestArchives/Archives/ustar with long names.tar diff --git a/SharpCompress.Test/Tar/TarArchiveTests.cs b/SharpCompress.Test/Tar/TarArchiveTests.cs index 259122c8..3cbd6998 100644 --- a/SharpCompress.Test/Tar/TarArchiveTests.cs +++ b/SharpCompress.Test/Tar/TarArchiveTests.cs @@ -40,6 +40,22 @@ namespace SharpCompress.Test } } + [TestMethod] + public void Tar_UstarArchivePathReadLongName() + { + string unmodified = Path.Combine(TEST_ARCHIVES_PATH, "ustar with long names.tar"); + using(var archive = TarArchive.Open(unmodified)) + { + Assert.AreEqual(6, archive.Entries.Count); + Assert.IsTrue(archive.Entries.Any(entry => entry.Key == "Directory/")); + Assert.IsTrue(archive.Entries.Any(entry => entry.Key == "Directory/Some file with veeeeeeeeeery loooooooooong name")); + Assert.IsTrue(archive.Entries.Any(entry => entry.Key == "Directory/Directory with veeeeeeeeeery loooooooooong name/")); + Assert.IsTrue(archive.Entries.Any(entry => entry.Key == "Directory/Directory with veeeeeeeeeery loooooooooong name/Some file with veeeeeeeeeery loooooooooong name")); + Assert.IsTrue(archive.Entries.Any(entry => entry.Key == "Directory/Directory with veeeeeeeeeery loooooooooong name/Directory with veeeeeeeeeery loooooooooong name/")); + Assert.IsTrue(archive.Entries.Any(entry => entry.Key == "Directory/Directory with veeeeeeeeeery loooooooooong name/Directory with veeeeeeeeeery loooooooooong name/Some file with veeeeeeeeeery loooooooooong name")); + } + } + [TestMethod] public void Tar_Create_New() { diff --git a/SharpCompress/Common/Tar/Headers/TarHeader.cs b/SharpCompress/Common/Tar/Headers/TarHeader.cs index 4e297957..5529f031 100644 --- a/SharpCompress/Common/Tar/Headers/TarHeader.cs +++ b/SharpCompress/Common/Tar/Headers/TarHeader.cs @@ -120,7 +120,7 @@ namespace SharpCompress.Common.Tar.Headers Magic = ArchiveEncoding.Default.GetString(buffer, 257, 6).TrimNulls(); - if (!string.IsNullOrEmpty(Magic) && "ustar ".Equals(Magic)) + if (!string.IsNullOrEmpty(Magic) && "ustar".Equals(Magic)) { string namePrefix = ArchiveEncoding.Default.GetString(buffer, 345, 157); namePrefix = namePrefix.TrimNulls(); diff --git a/TestArchives/Archives/ustar with long names.tar b/TestArchives/Archives/ustar with long names.tar new file mode 100644 index 0000000000000000000000000000000000000000..35e96cdba2c99bc3a6f5ed18681a95e5cf83767c GIT binary patch literal 5632 zcmZ?CEJ{r-$uFu@D9oP0RQOIOHC%uUq~&d*I%NXyJgB~Cp92pAX` zn3^V(oAbyT3nJ?#9&}h zTvC*noKcF?IzsXgpMX3EVkt1d0~V)=gF?a$6qU*Oc_pcNC0v8TMWc?OX9&QPsXm-V zT+Y@f-jxOh2Il6bpsax-{~H(}<$rSp10z!ta}x#yQ{t^4UnQ;bKlv`At4>m5oi63S ziMhF<$#5zENzGVvjedsF@}IupJ=km`HUE>U9^_xr%71YC&&Kl^c-_%gSz|h19RQ`|F|D=XA>FN>jPfpEFoP8ws|BOtHOiYJ({ZCxb47jS% W`hUQqVAKJlAut*OqaiRLApiiSOi2L% literal 0 HcmV?d00001