diff options
author | Tobias Markmann <tm@ayena.de> | 2016-03-09 14:38:57 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2016-03-15 15:53:03 (GMT) |
commit | f7de41c770be1bc6c45e825ff0fbdd6bfb799fae (patch) | |
tree | 60f7802290dd1d06399f7a7c59fa621046321e18 /Swiften/TLS | |
parent | 8cdebcff1d1e8321b070c7e675f9a9709a2b0b81 (diff) | |
download | swift-f7de41c770be1bc6c45e825ff0fbdd6bfb799fae.zip swift-f7de41c770be1bc6c45e825ff0fbdd6bfb799fae.tar.bz2 |
Explicitly convert between nullable and non-nullable on OS X
Clang was complaining about implicit conversions between
nullable and non-nullable NSString pointers. Adjusted our
std::string -> NSString* conversion utilities to check for
nil and return an empty std::string in that case.
Replaced uses of [NSString stringWithUTF8String] with our
STD2NSSTRING macro.
Turned std::string <-> NSString* conversion macros into
functions.
Test-Information:
Builds without the warning on OS X 10.11.3 and Swift runs
without issues.
Change-Id: I949f2f3332018391aead58ef362764f4b7955b01
Diffstat (limited to 'Swiften/TLS')
-rw-r--r-- | Swiften/TLS/SecureTransport/SecureTransportCertificate.mm | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm b/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm index ed409bd..6f8e158 100644 --- a/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm +++ b/Swiften/TLS/SecureTransport/SecureTransportCertificate.mm @@ -25,6 +25,19 @@ T bridge_cast(S source) { } +namespace { + +inline std::string ns2StdString(NSString* _Nullable nsString); +inline std::string ns2StdString(NSString* _Nullable nsString) { + std::string stdString; + if (nsString != nil) { + stdString = std::string([nsString cStringUsingEncoding:NSUTF8StringEncoding]); + } + return stdString; +} + +} + namespace Swift { SecureTransportCertificate::SecureTransportCertificate(SecCertificateRef certificate) { @@ -49,9 +62,6 @@ SecureTransportCertificate::~SecureTransportCertificate() { } -#define NS2STDSTRING(a) (a == nil ? std::string() : std::string([a cStringUsingEncoding:NSUTF8StringEncoding])) - - void SecureTransportCertificate::parse() { assert(certificateHandle_); CFErrorRef error = NULL; @@ -63,7 +73,7 @@ void SecureTransportCertificate::parse() { CFStringRef subject = SecCertificateCopySubjectSummary(certificateHandle_.get()); if (subject) { NSString* subjectStr = bridge_cast<NSString*>(subject); - subjectName_ = NS2STDSTRING(subjectStr); + subjectName_ = ns2StdString(subjectStr); CFRelease(subject); } @@ -72,7 +82,7 @@ void SecureTransportCertificate::parse() { OSStatus error = SecCertificateCopyCommonName(certificateHandle_.get(), &commonName); if (!error && commonName) { NSString* commonNameStr = bridge_cast<NSString*>(commonName); - commonNames_.push_back(NS2STDSTRING(commonNameStr)); + commonNames_.push_back(ns2StdString(commonNameStr)); } if (commonName) { CFRelease(commonName); @@ -83,14 +93,14 @@ void SecureTransportCertificate::parse() { NSDictionary* subjectAltNamesDict = certDict[@"2.5.29.17"][@"value"]; for (NSDictionary* entry in subjectAltNamesDict) { - if ([entry[@"label"] isEqualToString:[NSString stringWithUTF8String:ID_ON_XMPPADDR_OID]]) { - xmppAddresses_.push_back(NS2STDSTRING(entry[@"value"])); + if ([entry[@"label"] isEqualToString:static_cast<NSString * _Nonnull>([NSString stringWithUTF8String:ID_ON_XMPPADDR_OID])]) { + xmppAddresses_.push_back(ns2StdString(entry[@"value"])); } - else if ([entry[@"label"] isEqualToString:[NSString stringWithUTF8String:ID_ON_DNSSRV_OID]]) { - srvNames_.push_back(NS2STDSTRING(entry[@"value"])); + else if ([entry[@"label"] isEqualToString:static_cast<NSString * _Nonnull>([NSString stringWithUTF8String:ID_ON_DNSSRV_OID])]) { + srvNames_.push_back(ns2StdString(entry[@"value"])); } else if ([entry[@"label"] isEqualToString:@"DNS Name"]) { - dnsNames_.push_back(NS2STDSTRING(entry[@"value"])); + dnsNames_.push_back(ns2StdString(entry[@"value"])); } } CFRelease(valueDict); |