diff options
author | Muxi Yan <mxyan@google.com> | 2018-10-19 09:13:27 -0700 |
---|---|---|
committer | Muxi Yan <mxyan@google.com> | 2018-10-19 09:13:27 -0700 |
commit | b9667c6c17590c1f63435ad8dab0554775299003 (patch) | |
tree | 5eda1f06764b664ec4a4cb47b076022ae663aa95 /src | |
parent | 82d91964493ceb5893b3874109bc4bbc7d87b821 (diff) |
handle NULL case when parsing certificate
Diffstat (limited to 'src')
-rw-r--r-- | src/objective-c/GRPCClient/private/GRPCSecureChannelFactory.m | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/objective-c/GRPCClient/private/GRPCSecureChannelFactory.m b/src/objective-c/GRPCClient/private/GRPCSecureChannelFactory.m index 13bca6c40d..90482cad21 100644 --- a/src/objective-c/GRPCClient/private/GRPCSecureChannelFactory.m +++ b/src/objective-c/GRPCClient/private/GRPCSecureChannelFactory.m @@ -42,6 +42,9 @@ NS_ASSUME_NONNULL_BEGIN - (NSData *)nullTerminatedDataWithString:(NSString *)string { // dataUsingEncoding: does not return a null-terminated string. NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; + if (data == nil) { + return nil; + } NSMutableData *nullTerminated = [NSMutableData dataWithData:data]; [nullTerminated appendBytes:"\0" length:1]; return nullTerminated; @@ -51,7 +54,7 @@ NS_ASSUME_NONNULL_BEGIN privateKey:(nullable NSString *)privateKey certChain:(nullable NSString *)certChain error:(NSError **)errorPtr { - static NSData *kDefaultRootsASCII; + static NSData *defaultRootsASCII; static NSError *kDefaultRootsError; static dispatch_once_t loading; dispatch_once(&loading, ^{ @@ -68,14 +71,14 @@ NS_ASSUME_NONNULL_BEGIN kDefaultRootsError = error; return; } - kDefaultRootsASCII = [self nullTerminatedDataWithString:contentInUTF8]; + defaultRootsASCII = [self nullTerminatedDataWithString:contentInUTF8]; }); NSData *rootsASCII; if (rootCerts != nil) { rootsASCII = [self nullTerminatedDataWithString:rootCerts]; } else { - if (kDefaultRootsASCII == nil) { + if (defaultRootsASCII == nil) { if (errorPtr) { *errorPtr = kDefaultRootsError; } @@ -88,11 +91,11 @@ NS_ASSUME_NONNULL_BEGIN kDefaultRootsError); return nil; } - rootsASCII = kDefaultRootsASCII; + rootsASCII = defaultRootsASCII; } - grpc_channel_credentials *creds; - if (privateKey == nil && certChain == nil) { + grpc_channel_credentials *creds = NULL; + if (privateKey.length == 0 && certChain.length == 0) { creds = grpc_ssl_credentials_create(rootsASCII.bytes, NULL, NULL, NULL); } else { grpc_ssl_pem_key_cert_pair key_cert_pair; @@ -100,7 +103,11 @@ NS_ASSUME_NONNULL_BEGIN NSData *certChainASCII = [self nullTerminatedDataWithString:certChain]; key_cert_pair.private_key = privateKeyASCII.bytes; key_cert_pair.cert_chain = certChainASCII.bytes; - creds = grpc_ssl_credentials_create(rootsASCII.bytes, &key_cert_pair, NULL, NULL); + if (key_cert_pair.private_key == NULL || key_cert_pair.cert_chain == NULL) { + creds = grpc_ssl_credentials_create(rootsASCII.bytes, NULL, NULL, NULL); + } else { + creds = grpc_ssl_credentials_create(rootsASCII.bytes, &key_cert_pair, NULL, NULL); + } } if ((self = [super init])) { |