我使用Veracode扫描我的应用程序,并遇到有关 未经检查的错误条件。这是我的代码:
let status = withUnsafeMutablePointer(to: &queryResult) {
SecItemCopyMatching(query as CFDictionary, UnsafeMutablePointer($0))
}
// Check the return status and throw an error if appropriate.
guard status != errSecItemNotFound else {
throw KeychainError.noKeychain
}
guard status == noErr else {
throw KeychainError.unhandledError(status: status)
}
错误在这一行:SecItemCopyMatching(以CFDictionary查询,UnsafeMutablePointer($ 0))
当应用程序无法正确处理在处理过程中发生的错误时,就会发生错误处理问题。如果某个功能未能生成正确的返回/状态代码,或者产品未处理该功能可能生成的所有可能的返回/状态代码,则可能会导致安全问题。同样,未能捕获函数引发的异常可能会导致程序崩溃或行为异常。
答案 0 :(得分:0)
根据the docs,闭包中的参数已经是UnsafeMutablePointer
类型。因此,基本上,您要将UnsafeMutablePointer<UnsafeMutablePointer>
传递到SecItemCopyMatching
,在这里(如果您想坚持使用UnsafeMutablePointer
,则应该传递UnsafeMutablePointer<CFTypeRef>
。因此,尝试
SecItemCopyMatching(query as CFDictionary, $0)