###前提・実現したいこと
Securityフレームワークを使用し、X.509形式の証明書を検証する処理を実装しました。
検証処理自体は正常に完了するのですが、その際にメモリリークが発生しているようです。
処理を抜ける前に適切に解放したいのですが、どのようにすればいいのかわかりません。
###発生している問題・エラーメッセージ
処理を1回実行した直後をDebug Memory Graphで確認したものです。
グラフを見るとSecTrustがどこからも参照されておらず、他のSec〜オブジェクトはSecTrustから参照されていて解放されていないため、SecTrustを解放できれば問題が解決するのではと考えています。
###該当のソースコード
certData
はCFData型の証明書データです。
trustPtr
はSecTrust?
のポインタなので、その領域をリリースしてもさらにそのオプショナル型から参照されている(?この辺いまいち内部の仕組みがわかっていません)SecTrustのオブジェクトは解放されていないのではないのか、と思うのですが、どうすれば解放されるのかがわかりません。
Swift
1let trustPtr = UnsafeMutablePointer<SecTrust?>.allocate(capacity: 1) 2let resultPtr = UnsafeMutablePointer<SecTrustResultType>.allocate(capacity: 1) 3 4let cert = SecCertificateCreateWithData(kCFAllocatorDefault, certData) 5SecTrustCreateWithCertificates(cert!, SecPolicyCreateBasicX509(), trustPtr) 6SecTrustEvaluate(trustPtr.pointee!, resultPtr) 7if(resultPtr.pointee != SecTrustResultType.unspecified && resultPtr.pointee != SecTrustResultType.proceed) { 8 print("Invalid certificate") 9} 10 11trustPtr.deallocate(capacity: 1) 12resultPtr.deallocate(capacity: 1)
###補足情報(言語/FW/ツール等のバージョンなど)
Swift 3.0.2
Xcode 8.2.1
iOS 10.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。