summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-11-03 12:20:20 (GMT)
committerSwift Review <review@swift.im>2015-11-06 10:50:52 (GMT)
commit7302ee18a137f6810ef1cc40a395f99d2f46a644 (patch)
tree6360ffe3666118ad4e30628336c8705e240bd465 /Swiften/TLS/SecureTransport/SecureTransportContext.mm
parent8405fa16b738b6ef6a5920cd9d0f5735f8b62369 (diff)
downloadswift-7302ee18a137f6810ef1cc40a395f99d2f46a644.zip
swift-7302ee18a137f6810ef1cc40a395f99d2f46a644.tar.bz2
Fix potential memory leaks in Cocoa API usage
These errors were reported by Clang Analyzer. Test-Information: Verified that behavior is still as expected and Clang Analyzer does not report the warnings anymore. Change-Id: I149d75241f7680a6d2f2b6b710dd38d1ed81a209
Diffstat (limited to 'Swiften/TLS/SecureTransport/SecureTransportContext.mm')
-rw-r--r--Swiften/TLS/SecureTransport/SecureTransportContext.mm8
1 files changed, 4 insertions, 4 deletions
diff --git a/Swiften/TLS/SecureTransport/SecureTransportContext.mm b/Swiften/TLS/SecureTransport/SecureTransportContext.mm
index 7f44f7d..a702cde 100644
--- a/Swiften/TLS/SecureTransport/SecureTransportContext.mm
+++ b/Swiften/TLS/SecureTransport/SecureTransportContext.mm
@@ -38,7 +38,7 @@ namespace Swift {
namespace {
-CFArrayRef getClientCertificateChainAsCFArrayRef(CertificateWithKey::ref key) {
+CFArrayRef CreateClientCertificateChainAsCFArrayRef(CertificateWithKey::ref key) {
boost::shared_ptr<PKCS12Certificate> pkcs12 = boost::dynamic_pointer_cast<PKCS12Certificate>(key);
if (!key) {
return NULL;
@@ -64,6 +64,7 @@ CFArrayRef getClientCertificateChainAsCFArrayRef(CertificateWithKey::ref key) {
CFArrayRef items = NULL;
CFDataRef pkcs12Data = bridge_cast<CFDataRef>([NSData dataWithBytes: static_cast<const void *>(pkcs12->getData().data()) length:pkcs12->getData().size()]);
securityError = SecPKCS12Import(pkcs12Data, options, &items);
+ CFRelease(options);
NSArray* nsItems = bridge_cast<NSArray*>(items);
switch(securityError) {
@@ -76,7 +77,6 @@ CFArrayRef getClientCertificateChainAsCFArrayRef(CertificateWithKey::ref key) {
default:
CFRelease(certChain);
CFRelease(items);
- CFRelease(options);
certChain = NULL;
}
@@ -150,7 +150,7 @@ void SecureTransportContext::setState(State newState) {
void SecureTransportContext::connect() {
SWIFT_LOG_ASSERT(state_ == None, error) << "current state '" << stateToString(state_) << " invalid." << std::endl;
if (clientCertificate_) {
- CFArrayRef certs = getClientCertificateChainAsCFArrayRef(clientCertificate_);
+ CFArrayRef certs = CreateClientCertificateChainAsCFArrayRef(clientCertificate_);
if (certs) {
boost::shared_ptr<CFArray> certRefs(certs, CFRelease);
OSStatus result = SSLSetCertificate(sslContext_.get(), certRefs.get());
@@ -274,7 +274,7 @@ void SecureTransportContext::verifyServerCertificate() {
#pragma clang diagnostic pop
bool SecureTransportContext::setClientCertificate(CertificateWithKey::ref cert) {
- CFArrayRef nativeClientChain = getClientCertificateChainAsCFArrayRef(cert);
+ CFArrayRef nativeClientChain = CreateClientCertificateChainAsCFArrayRef(cert);
if (nativeClientChain) {
clientCertificate_ = cert;
CFRelease(nativeClientChain);