From bd938a4818edeaf72f3c1511dde976a20f9fc046 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Joa=CC=83o=20Matos?= Date: Fri, 17 Jun 2016 18:19:19 +0100 Subject: [PATCH] [System.IO.Compression] Fixed Zip entries with unset last write time to return the same as .NET. .NET on Windows returns a fixed date for this, replicate the same behaviour in Mono. Fixes https://bugzilla.xamarin.com/show_bug.cgi?id=40916. See also: https://github.com/NuGet/Home/issues/2518 --- .../SharpCompress/Common/Zip/ZipEntry.cs | 7 +++++++ .../Test/System.IO.Compression/ZipTest.cs | 12 ++++++++++++ mcs/class/System.IO.Compression/test.nupkg | Bin 0 -> 5784 bytes 3 files changed, 19 insertions(+) create mode 100644 mcs/class/System.IO.Compression/test.nupkg diff --git a/mcs/class/System.IO.Compression/SharpCompress/Common/Zip/ZipEntry.cs b/mcs/class/System.IO.Compression/SharpCompress/Common/Zip/ZipEntry.cs index 6ed742eeca3..2c0ec07e784 100644 --- a/mcs/class/System.IO.Compression/SharpCompress/Common/Zip/ZipEntry.cs +++ b/mcs/class/System.IO.Compression/SharpCompress/Common/Zip/ZipEntry.cs @@ -16,6 +16,13 @@ namespace SharpCompress.Common.Zip this.filePart = filePart; lastModifiedTime = Utility.DosDateToDateTime(filePart.Header.LastModifiedDate, filePart.Header.LastModifiedTime); + if (lastModifiedTime == default(DateTime)) + { + // On .NET on Windows, for zip entries that don't have a last write time, + // the return value for ZipArchiveEntry.LastWriteTime is: + // 1/1/1980 12:00:00 AM, Ticks=624511296000000000 + lastModifiedTime = new DateTime(624511296000000000); + } } } diff --git a/mcs/class/System.IO.Compression/Test/System.IO.Compression/ZipTest.cs b/mcs/class/System.IO.Compression/Test/System.IO.Compression/ZipTest.cs index d461600299f..4205a1f40a0 100644 --- a/mcs/class/System.IO.Compression/Test/System.IO.Compression/ZipTest.cs +++ b/mcs/class/System.IO.Compression/Test/System.IO.Compression/ZipTest.cs @@ -263,6 +263,18 @@ namespace MonoTests.System.IO.Compression File.Delete ("test.zip"); } + [Test] + public void ZipEnumerateArchiveDefaultLastWriteTime() + { + using (var archive = new ZipArchive(File.Open("test.nupkg", FileMode.Open), + ZipArchiveMode.Read)) + { + var entry = archive.GetEntry("_rels/.rels"); + Assert.AreEqual(new DateTime(624511296000000000).Ticks, entry.LastWriteTime.Ticks); + Assert.IsNotNull(entry); + } + } + [Test] public void ZipEnumerateEntriesReadMode() { diff --git a/mcs/class/System.IO.Compression/test.nupkg b/mcs/class/System.IO.Compression/test.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..0a7fe0575c032009c27f38a183c0723214d656ae GIT binary patch literal 5784 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 literal 0 HcmV?d00001 -- 2.25.1