From 04ba6c2d735d7c69c18812d014a49645ca3f143e Mon Sep 17 00:00:00 2001 From: "srperias@microsoft.com" Date: Tue, 27 Mar 2018 13:54:16 -0700 Subject: [PATCH] ZipArchive Reader: Uses IBM PC character encoding to decode filename and comment if the general purpose bit 11 is not set in the header --- .../Common/Zip/Headers/DirectoryEntryHeader.cs | 6 ++++++ src/SharpCompress/Common/Zip/Headers/LocalEntryHeader.cs | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/SharpCompress/Common/Zip/Headers/DirectoryEntryHeader.cs b/src/SharpCompress/Common/Zip/Headers/DirectoryEntryHeader.cs index e7502d26..b1c4860a 100644 --- a/src/SharpCompress/Common/Zip/Headers/DirectoryEntryHeader.cs +++ b/src/SharpCompress/Common/Zip/Headers/DirectoryEntryHeader.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using System.Text; namespace SharpCompress.Common.Zip.Headers { @@ -16,6 +17,11 @@ namespace SharpCompress.Common.Zip.Headers Version = reader.ReadUInt16(); VersionNeededToExtract = reader.ReadUInt16(); Flags = (HeaderFlags)reader.ReadUInt16(); + if ((Flags & HeaderFlags.UTF8) == 0) + { + // IBM Code Page 437 + ArchiveEncoding.Default = Encoding.GetEncoding("iso-8859-1"); + } CompressionMethod = (ZipCompressionMethod)reader.ReadUInt16(); LastModifiedTime = reader.ReadUInt16(); LastModifiedDate = reader.ReadUInt16(); diff --git a/src/SharpCompress/Common/Zip/Headers/LocalEntryHeader.cs b/src/SharpCompress/Common/Zip/Headers/LocalEntryHeader.cs index 2b89385b..eaf0f62c 100644 --- a/src/SharpCompress/Common/Zip/Headers/LocalEntryHeader.cs +++ b/src/SharpCompress/Common/Zip/Headers/LocalEntryHeader.cs @@ -15,6 +15,11 @@ namespace SharpCompress.Common.Zip.Headers { Version = reader.ReadUInt16(); Flags = (HeaderFlags)reader.ReadUInt16(); + if ((Flags & HeaderFlags.UTF8) == 0) + { + // IBM Code Page 437 + ArchiveEncoding.Default = Encoding.GetEncoding("iso-8859-1"); + } CompressionMethod = (ZipCompressionMethod)reader.ReadUInt16(); LastModifiedTime = reader.ReadUInt16(); LastModifiedDate = reader.ReadUInt16();