From 2559241a965065b99cfd421cbce21e45cffa078d Mon Sep 17 00:00:00 2001 From: Timofey Solomko Date: Sun, 15 Jan 2017 13:08:42 +0300 Subject: [PATCH] Added correct extra field parsing. --- Sources/ZipContainer.swift | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Sources/ZipContainer.swift b/Sources/ZipContainer.swift index 9fc5bcc7..de75a4a9 100644 --- a/Sources/ZipContainer.swift +++ b/Sources/ZipContainer.swift @@ -159,7 +159,6 @@ struct CentralDirectoryEntry { let uncompSize: UInt32 let fileName: String? - let extraField: [UInt8] let fileComment: String? let diskNumberStart: Int @@ -198,7 +197,22 @@ struct CentralDirectoryEntry { self.fileName = String(data: Data(bytes: pointerData.alignedBytes(count: fileNameLength)), encoding: .utf8) - self.extraField = pointerData.alignedBytes(count: extraFieldLength) + + let extraFieldStart = pointerData.index + while pointerData.index - extraFieldStart < extraFieldLength { + // There are a lot of possible extra fields. + // But we are (currently) only interested in Zip64 related fields (with headerID = 0x0001), + // because they directly impact further extraction process. + let headerID = pointerData.intFromAlignedBytes(count: 2) + let size = pointerData.intFromAlignedBytes(count: 2) + switch headerID { + case 0x0001: + print() + default: + pointerData.index += size + } + } + self.fileComment = String(data: Data(bytes: pointerData.alignedBytes(count: fileCommentLength)), encoding: .utf8) }