aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Muxi Yan <mxyan@google.com>2018-10-19 09:13:27 -0700
committerGravatar Muxi Yan <mxyan@google.com>2018-10-19 09:13:27 -0700
commitb9667c6c17590c1f63435ad8dab0554775299003 (patch)
tree5eda1f06764b664ec4a4cb47b076022ae663aa95 /src
parent82d91964493ceb5893b3874109bc4bbc7d87b821 (diff)
handle NULL case when parsing certificate
Diffstat (limited to 'src')
-rw-r--r--src/objective-c/GRPCClient/private/GRPCSecureChannelFactory.m21
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])) {