Commit ec48965f authored by Keanu Pang's avatar Keanu Pang

HA-1053 Workaround fix for memory allocation in unzip process

parent 000fb6b0
...@@ -153,12 +153,13 @@ public class Zip { ...@@ -153,12 +153,13 @@ public class Zip {
throw ZipError.unzipFail throw ZipError.unzipFail
} }
currentPosition += Double(fileInfo.compressed_size) currentPosition += Double(fileInfo.compressed_size)
let fileNameSize = Int(fileInfo.size_filename) + 1 fileInfo.size_filename = 10240
let fileNameSize = 10240 // Int(fileInfo.size_filename) + 1
//let fileName = UnsafeMutablePointer<CChar>(allocatingCapacity: fileNameSize) //let fileName = UnsafeMutablePointer<CChar>(allocatingCapacity: fileNameSize)
let fileName = UnsafeMutablePointer<CChar>.allocate(capacity: fileNameSize) let fileName = UnsafeMutablePointer<CChar>.allocate(capacity: fileNameSize)
unzGetCurrentFileInfo64(zip, &fileInfo, fileName, UInt(fileNameSize), nil, 0, nil, 0) unzGetCurrentFileInfo64(zip, &fileInfo, fileName, UInt(fileNameSize), nil, 0, nil, 0)
fileName[Int(fileInfo.size_filename)] = 0 //fileName[Int(fileInfo.size_filename)] = 0
var pathString = String(cString: fileName) var pathString = String(cString: fileName)
...@@ -166,11 +167,11 @@ public class Zip { ...@@ -166,11 +167,11 @@ public class Zip {
throw ZipError.unzipFail throw ZipError.unzipFail
} }
var isDirectory = false // var isDirectory = false
let fileInfoSizeFileName = Int(fileInfo.size_filename-1) // let fileInfoSizeFileName = Int(fileInfo.size_filename-1)
if (fileName[fileInfoSizeFileName] == "/".cString(using: String.Encoding.utf8)?.first || fileName[fileInfoSizeFileName] == "\\".cString(using: String.Encoding.utf8)?.first) { // if (fileName[fileInfoSizeFileName] == "/".cString(using: String.Encoding.utf8)?.first || fileName[fileInfoSizeFileName] == "\\".cString(using: String.Encoding.utf8)?.first) {
isDirectory = true; // isDirectory = true;
} // }
free(fileName) free(fileName)
if pathString.rangeOfCharacter(from: CharacterSet(charactersIn: "/\\")) != nil { if pathString.rangeOfCharacter(from: CharacterSet(charactersIn: "/\\")) != nil {
pathString = pathString.replacingOccurrences(of: "\\", with: "/") pathString = pathString.replacingOccurrences(of: "\\", with: "/")
...@@ -184,15 +185,15 @@ public class Zip { ...@@ -184,15 +185,15 @@ public class Zip {
FileAttributeKey.modificationDate : creationDate] FileAttributeKey.modificationDate : creationDate]
do { do {
if isDirectory { // if isDirectory {
try fileManager.createDirectory(atPath: fullPath, withIntermediateDirectories: true, attributes: directoryAttributes) // try fileManager.createDirectory(atPath: fullPath, withIntermediateDirectories: true, attributes: directoryAttributes)
} // }
else { // else {
let parentDirectory = (fullPath as NSString).deletingLastPathComponent let parentDirectory = (fullPath as NSString).deletingLastPathComponent
try fileManager.createDirectory(atPath: parentDirectory, withIntermediateDirectories: true, attributes: directoryAttributes) try fileManager.createDirectory(atPath: parentDirectory, withIntermediateDirectories: true, attributes: directoryAttributes)
} // }
} catch {} } catch {}
if fileManager.fileExists(atPath: fullPath) && !isDirectory && !overwrite { if fileManager.fileExists(atPath: fullPath) && !overwrite { // !isDirectory && !overwrite {
unzCloseCurrentFile(zip) unzCloseCurrentFile(zip)
ret = unzGoToNextFile(zip) ret = unzGoToNextFile(zip)
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment