@@ -160,8 +160,9 @@ func (i *macIdentity) CertificateChain() ([]*x509.Certificate, error) {
160160 }
161161 defer C .CFRelease (C .CFTypeRef (trustRef ))
162162
163- var status C.SecTrustResultType
164- if err := osStatusError (C .SecTrustEvaluate (trustRef , & status )); err != nil {
163+ var cfError C.CFErrorRef
164+ if C .SecTrustEvaluateWithError (trustRef , & cfError ) {
165+ err := cfErrorError (cfError )
165166 return nil , err
166167 }
167168
@@ -171,18 +172,22 @@ func (i *macIdentity) CertificateChain() ([]*x509.Certificate, error) {
171172 )
172173
173174 for i := C .CFIndex (0 ); i < nchain ; i ++ {
174- // TODO: do we need to release these?
175- chainCertref := C . SecTrustGetCertificateAtIndex ( trustRef , i )
176- if chainCertref == nilSecCertificateRef {
177- return nil , errors .New ("nil certificate in chain" )
175+ chainCertCpy := C . SecTrustCopyCertificateChain ( trustRef )
176+
177+ if C . CFArrayRef ( chainCertCpy ) == nilCFArrayRef {
178+ return nil , errors .New ("nil certificate in the chain" )
178179 }
179180
180- chainCert , err := exportCertRef (chainCertref )
181+ chainCertRef := C .SecCertificateRef (C .CFArrayGetValueAtIndex (chainCertCpy , i ))
182+
183+ chainCert , err := exportCertRef (chainCertRef )
181184 if err != nil {
182185 return nil , err
183186 }
184187
185188 chain = append (chain , chainCert )
189+
190+ C .CFRelease (C .CFTypeRef (chainCertCpy ))
186191 }
187192
188193 i .chain = chain
0 commit comments