summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/TLS/SecureTransport/SecureTransportCertificate.mm')
-rw-r--r--Swiften/TLS/SecureTransport/SecureTransportCertificate.mm16
1 files changed, 10 insertions, 6 deletions
diff --git a/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm b/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm
index 3b4e00f..4270a6f 100644
--- a/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm
+++ b/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm
@@ -38,6 +38,7 @@ SecureTransportCertificate::SecureTransportCertificate(SecCertificateRef certifi
SecureTransportCertificate::SecureTransportCertificate(const ByteArray& der) {
CFDataRef derData = CFDataCreateWithBytesNoCopy(NULL, der.data(), static_cast<CFIndex>(der.size()), NULL);
SecCertificateRef certificate = SecCertificateCreateWithData(NULL, derData);
+ CFRelease(derData);
if (certificate) {
certificateHandle_ = boost::shared_ptr<SecCertificate>(certificate, CFRelease);
parse();
@@ -57,10 +58,7 @@ void SecureTransportCertificate::parse() {
// The SecCertificateCopyValues function is not part of the iOS Secure Transport API.
CFDictionaryRef valueDict = SecCertificateCopyValues(certificateHandle_.get(), 0, &error);
- if (error) {
- CFRelease(error);
- }
- else {
+ if (valueDict) {
// Handle subject.
CFStringRef subject = SecCertificateCopySubjectSummary(certificateHandle_.get());
if (subject) {
@@ -70,11 +68,13 @@ void SecureTransportCertificate::parse() {
}
// Handle a single Common Name.
- CFStringRef commonName;
+ CFStringRef commonName = NULL;
OSStatus error = SecCertificateCopyCommonName(certificateHandle_.get(), &commonName);
- if (!error) {
+ if (!error && commonName) {
NSString* commonNameStr = bridge_cast<NSString*>(commonName);
commonNames_.push_back(NS2STDSTRING(commonNameStr));
+ }
+ if (commonName) {
CFRelease(commonName);
}
@@ -95,6 +95,10 @@ void SecureTransportCertificate::parse() {
}
CFRelease(valueDict);
}
+
+ if (error) {
+ CFRelease(error);
+ }
}
std::string SecureTransportCertificate::getSubjectName() const {