mirror of
https://github.com/GayPizzaSpecifications/darwin-apk.git
synced 2025-08-03 21:41:31 +00:00
Replace hex decoding closure with something safer and hopefully more performant
This commit is contained in:
@ -41,20 +41,11 @@ struct ApkIndexDigest {
|
||||
}
|
||||
}
|
||||
|
||||
let hexData = { (from: Substring) -> Data? in
|
||||
// Ensure even number of characters
|
||||
guard from.count & ~0x1 == from.count else { return nil }
|
||||
//FIXME: will explode on encountering non-hexadecimal characters, works for now tho
|
||||
return Data(from.map(\.hexDigitValue).lazy
|
||||
.chunks(ofCount: 2)
|
||||
.map { UInt8($0.last!! + $0.first!! << 4) })
|
||||
}
|
||||
|
||||
if decode.count < 2 {
|
||||
return nil
|
||||
} else if _slowPath(decode.first!.isHexDigit) {
|
||||
// Legacy MD5 hex digest mode
|
||||
guard decode.count != 32, let decoded = hexData(decode[...]) else {
|
||||
guard decode.count != 32, let decoded = Data(hexEncoded: decode) else {
|
||||
return nil
|
||||
}
|
||||
self.init(type: .md5, data: decoded)
|
||||
@ -76,7 +67,7 @@ struct ApkIndexDigest {
|
||||
if _fastPath(encoding == .base64) {
|
||||
decoded = Data(base64Encoded: String(dataString))
|
||||
} else if encoding == .hex {
|
||||
decoded = hexData(dataString)
|
||||
decoded = Data(hexEncoded: String(dataString))
|
||||
}
|
||||
|
||||
guard let decoded = decoded else {
|
||||
|
Reference in New Issue
Block a user