From fe3ec457fa286ac7c74420232d14f5cd36b01a1f Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 25 Jan 2017 16:32:12 -0500 Subject: [PATCH 1/2] Disable resetting unreadable storage Until we have better data on why this occurs, we don't want to risk blowing users message archive. // FREEBIE --- src/Storage/TSStorageManager.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Storage/TSStorageManager.m b/src/Storage/TSStorageManager.m index 49bba31ed..34903386d 100644 --- a/src/Storage/TSStorageManager.m +++ b/src/Storage/TSStorageManager.m @@ -118,7 +118,8 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass"; OWSAnalyticsCritical(@"Could not load database"); // Try to reset app by deleting database. - [self resetSignalStorage]; + // Disabled resetting storage until we have better data on why this happens. + // [self resetSignalStorage]; if (![self tryToLoadDatabase]) { OWSAnalyticsCritical(@"Could not load database (second attempt)"); From 104645f97bfb76f1b1bbb6234c2b95df5ec4e6cf Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Tue, 31 Jan 2017 09:46:25 -0500 Subject: [PATCH 2/2] 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];