From: Nick Zitzmann Date: Wed, 14 May 2014 22:48:14 +0000 (-0500) Subject: darwinssl: fix potential crash when attempting to copy an identity X-Git-Tag: curl-7_37_0~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=69cdc95932f5f1dad774f5692037e4a0fdb311cd;p=thirdparty%2Fcurl.git darwinssl: fix potential crash when attempting to copy an identity from a P12 file This could've happened if SecPKCS12Import() returned noErr _and_ no identity. --- diff --git a/lib/vtls/curl_darwinssl.c b/lib/vtls/curl_darwinssl.c index 3a9da91ccf..3627963dd4 100644 --- a/lib/vtls/curl_darwinssl.c +++ b/lib/vtls/curl_darwinssl.c @@ -952,7 +952,7 @@ static OSStatus CopyIdentityFromPKCS12File(const char *cPath, /* Here we go: */ status = SecPKCS12Import(pkcs_data, options, &items); - if(status == noErr) { + if(status == noErr && items && CFArrayGetCount(items)) { CFDictionaryRef identity_and_trust = CFArrayGetValueAtIndex(items, 0L); const void *temp_identity = CFDictionaryGetValue(identity_and_trust, kSecImportItemIdentity); @@ -960,8 +960,10 @@ static OSStatus CopyIdentityFromPKCS12File(const char *cPath, /* Retain the identity; we don't care about any other data... */ CFRetain(temp_identity); *out_cert_and_key = (SecIdentityRef)temp_identity; - CFRelease(items); } + + if(items) + CFRelease(items); CFRelease(options); CFRelease(pkcs_data); }