From 9b24ad7f14748d94fa38e32e28aef068f3d2ce0d Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 19 Apr 2017 15:17:56 -0400 Subject: [PATCH] Do not try to resend unsaved outgoing messages when accepting a safety number change. // FREEBIE --- src/Messages/OWSMessageSender.m | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Messages/OWSMessageSender.m b/src/Messages/OWSMessageSender.m index 5533c901c..7cf2bbded 100644 --- a/src/Messages/OWSMessageSender.m +++ b/src/Messages/OWSMessageSender.m @@ -391,6 +391,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; success:(void (^)())successHandler failure:(void (^)(NSError *error))failureHandler { + OWSAssert(message); AssertIsOnMainThread(); [message updateWithMessageState:TSOutgoingMessageStateAttemptingOut]; @@ -523,13 +524,27 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; success:(void (^)())successHandler failure:(void (^)(NSError *error))failureHandler { - TSOutgoingMessage *message = [TSOutgoingMessage fetchObjectWithUniqueID:errorMessage.messageId]; + AssertIsOnMainThread(); + OWSAssert(errorMessage); + + NSString *failedMessageId = errorMessage.messageId; // Here we remove the existing error message because sending a new message will either // 1.) succeed and create a new successful message in the thread or... // 2.) fail and create a new identical error message in the thread. [errorMessage remove]; + // The failedMessageId might be nil for transient, unsaved outgoing messages. + // See [TSOutgoingMessage saveWithTransaction:] for details of which messages + // we do not save. + + if (!failedMessageId) { + return; + } + + TSOutgoingMessage *message = [TSOutgoingMessage fetchObjectWithUniqueID:failedMessageId]; + OWSAssert(message); + return [self sendMessage:message success:successHandler failure:failureHandler]; }