From 104645f97bfb76f1b1bbb6234c2b95df5ec4e6cf Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Tue, 31 Jan 2017 09:46:25 -0500 Subject: [PATCH] Safely pass exception across dispatch bounds // FREEBIE --- src/Messages/OWSMessageSender.m | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Messages/OWSMessageSender.m b/src/Messages/OWSMessageSender.m index 9ab0934fa..a01c620fd 100644 --- a/src/Messages/OWSMessageSender.m +++ b/src/Messages/OWSMessageSender.m @@ -630,15 +630,24 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; BOOL isLegacyMessage = ![message isKindOfClass:[OWSOutgoingSyncMessage class]]; __block NSDictionary *messageDict; + __block NSException *encryptionException; // Mutating session state is not thread safe, so we operate on a serial queue, shared with decryption // operations. dispatch_sync([OWSDispatch sessionCipher], ^{ - messageDict = [self encryptedMessageWithPlaintext:plainText - toRecipient:recipient.uniqueId - deviceId:deviceNumber - keyingStorage:[TSStorageManager sharedManager] - legacy:isLegacyMessage]; + @try { + messageDict = [self encryptedMessageWithPlaintext:plainText + toRecipient:recipient.uniqueId + deviceId:deviceNumber + keyingStorage:[TSStorageManager sharedManager] + legacy:isLegacyMessage]; + } @catch (NSException *exception) { + encryptionException = exception; + } }); + if (encryptionException) { + DDLogInfo(@"%@ Exception during encryption: %@", self.tag, encryptionException); + @throw encryptionException; + } if (messageDict) { [messagesArray addObject:messageDict];