From a389344e0a40179d89fbde3bc72bba467b14d77d Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Wed, 28 Jan 2015 20:43:43 -1000 Subject: [PATCH] Fixing issue with identity key change messages deletion. When a key change is accepted, we iterate over the list of messages that are waiting for decryption. This commit fixes an issue with error messages not being deleted after message is processed for decryption. --- .../TSInvalidIdentityKeyErrorMessage.m | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m b/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m index 22ce843ba..0de3657f5 100644 --- a/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m +++ b/Signal/src/textsecure/Messages/TSInvalidIdentityKeyErrorMessage.m @@ -41,7 +41,7 @@ if (self.errorType != TSErrorMessageWrongTrustedIdentityKey || !self.pushSignal) { return; } - + TSStorageManager *storage = [TSStorageManager sharedManager]; IncomingPushMessageSignal *signal = [IncomingPushMessageSignal parseFromData:self.pushSignal]; PreKeyWhisperMessage *message = [[PreKeyWhisperMessage alloc] initWithData:signal.message]; @@ -51,7 +51,7 @@ [[TSMessagesManager sharedManager] handleMessageSignal:signal]; - __block NSMutableSet *messagesToDecrypt = [NSMutableSet set]; + __block NSMutableSet *messagesToDecrypt = [NSMutableSet set]; [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [[transaction ext:TSMessageDatabaseViewExtensionName]enumerateKeysAndObjectsInGroup:self.uniqueThreadId withOptions:NSEnumerationReverse usingBlock:^(NSString *collection, NSString *key, id object, NSUInteger index, BOOL *stop) { @@ -66,16 +66,22 @@ NSData *newKeyCandidate = [pkwm.identityKey removeKeyType]; if ([newKeyCandidate isEqualToData:newKey]) { - [messagesToDecrypt addObject:invalidMessageSignal]; + [messagesToDecrypt addObject:invalidKeyMessage]; } } }]; - [self removeWithTransaction:transaction]; }]; - for (IncomingPushMessageSignal *aSignal in messagesToDecrypt) { - [[TSMessagesManager sharedManager] handleMessageSignal:aSignal]; + + for (TSInvalidIdentityKeyErrorMessage *errorMessage in messagesToDecrypt) { + + [[TSMessagesManager sharedManager] handleMessageSignal:[IncomingPushMessageSignal parseFromData:errorMessage.pushSignal]]; + + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [errorMessage removeWithTransaction:transaction]; + }]; } + } - (NSString *)newIdentityKey{