Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43b1632877 | ||
|
|
e1c3e89e09 | ||
|
|
3c7c920c47 | ||
|
|
5a56c22a97 | ||
|
|
39f160344e |
@@ -22,8 +22,23 @@ public enum Credentials {
|
||||
case plaintext(username: String, password: String)
|
||||
case sshMemory(username: String, publicKey: String, privateKey: String, passphrase: String)
|
||||
|
||||
internal static func fromPointer(_ pointer: UnsafeMutableRawPointer) -> Credentials {
|
||||
return Unmanaged<Wrapper<Credentials>>.fromOpaque(UnsafeRawPointer(pointer)).takeRetainedValue().value
|
||||
private static var previouslyUsedPointer: String? = nil
|
||||
internal static func fromPointer(_ pointer: UnsafeMutableRawPointer) -> Credentials? {
|
||||
// check if we had just seen this pointer
|
||||
if pointer.debugDescription == previouslyUsedPointer {
|
||||
// we have already used this pointer, so it is likely that libgit2
|
||||
// has already freed the memory and using Unmanaged<>.fromOpaque will
|
||||
// result in a BAD_ACCESS crash
|
||||
return nil
|
||||
} else {
|
||||
// mark that we have used this pointer so that
|
||||
// later attempts to use it in this function will
|
||||
// be blocked
|
||||
previouslyUsedPointer = pointer.debugDescription
|
||||
// access the pointer and convert it into a
|
||||
// Credentials Swift object
|
||||
return Unmanaged<Wrapper<Credentials>>.fromOpaque(UnsafeRawPointer(pointer)).takeRetainedValue().value
|
||||
}
|
||||
}
|
||||
|
||||
internal func toPointer() -> UnsafeMutableRawPointer {
|
||||
@@ -55,6 +70,8 @@ internal func credentialsCallback(
|
||||
result = git_cred_userpass_plaintext_new(cred, username, password)
|
||||
case .sshMemory(let username, let publicKey, let privateKey, let passphrase):
|
||||
result = git_cred_ssh_key_memory_new(cred, username, publicKey, privateKey, passphrase)
|
||||
default:
|
||||
result = git_cred_default_new(cred)
|
||||
}
|
||||
|
||||
return (result != GIT_OK.rawValue) ? -1 : 0
|
||||
|
||||
Reference in New Issue
Block a user