summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2016-03-09 14:38:57 (GMT)
committerTobias Markmann <tm@ayena.de>2016-03-15 15:53:03 (GMT)
commitf7de41c770be1bc6c45e825ff0fbdd6bfb799fae (patch)
tree60f7802290dd1d06399f7a7c59fa621046321e18 /Swiften
parent8cdebcff1d1e8321b070c7e675f9a9709a2b0b81 (diff)
downloadswift-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')
-rw-r--r--Swiften/TLS/SecureTransport/SecureTransportCertificate.mm30
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);