diff --git a/Pods b/Pods index 2870e676d..67dbced37 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 2870e676deec6a7ddb931edb6f0284f1f5b36085 +Subproject commit 67dbced37481e0011a3df1397ed57711384a4957 diff --git a/SignalMessaging/contacts/OWSSyncManager.m b/SignalMessaging/contacts/OWSSyncManager.m index 2ebbc95ee..d5c2c4574 100644 --- a/SignalMessaging/contacts/OWSSyncManager.m +++ b/SignalMessaging/contacts/OWSSyncManager.m @@ -289,11 +289,12 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag [friends addObject:[[SignalAccount alloc] initWithRecipientId:hexEncodedPublicKey]]; } }]; + [friends addObject:[[SignalAccount alloc] initWithRecipientId:self.tsAccountManager.localNumber]]; NSMutableArray *signalAccounts = @[].mutableCopy; for (SignalAccount *contact in friends) { [signalAccounts addObject:contact]; - if (signalAccounts.count >= 2) { - [promises addObject:[self syncContactsForSignalAccounts:signalAccounts]]; + if (signalAccounts.count >= 3) { + [promises addObject:[self syncContactsForSignalAccounts:[signalAccounts copy]]]; [signalAccounts removeAllObjects]; } } @@ -327,7 +328,15 @@ NSString *const kSyncManagerLastContactSyncKey = @"kTSStorageManagerOWSSyncManag { NSMutableArray *groupThreads = @[].mutableCopy; NSMutableArray *promises = @[].mutableCopy; - [TSGroupThread enumerateCollectionObjectsUsingBlock:^(TSGroupThread *thread, BOOL *stop) { + [TSGroupThread enumerateCollectionObjectsUsingBlock:^(id obj, BOOL *stop) { + if (![obj isKindOfClass:[TSGroupThread class]]) { + if (![obj isKindOfClass:[TSContactThread class]]) { + OWSLogWarn(@"Ignoring non group thread in thread collection: %@", obj); + + } + return; + } + TSGroupThread *thread = (TSGroupThread *)obj; if (thread.groupModel.groupType == closedGroup && thread.shouldThreadBeVisible && !thread.isForceHidden) { [groupThreads addObject:thread]; } diff --git a/SignalServiceKit/src/Loki/Messaging/ContactParser.swift b/SignalServiceKit/src/Loki/Messaging/ContactParser.swift index 7b3dea666..b29e9c218 100644 --- a/SignalServiceKit/src/Loki/Messaging/ContactParser.swift +++ b/SignalServiceKit/src/Loki/Messaging/ContactParser.swift @@ -17,7 +17,7 @@ guard let size = uncheckedSize, size < data.count else { break } let sizeAsInt = Int(size) index += 4 - guard index + sizeAsInt < data.count else { break } + guard index + sizeAsInt <= data.count else { break } let protoAsData = data[index..<(index+sizeAsInt)] guard let proto = try? SSKProtoContactDetails.parseData(protoAsData) else { break } index += sizeAsInt diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m index 19bd4263c..2e67f3996 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSSyncContactsMessage.m @@ -109,21 +109,6 @@ NS_ASSUME_NONNULL_BEGIN - (nullable NSData *)buildPlainTextAttachmentDataWithTransaction:(YapDatabaseReadTransaction *)transaction { NSMutableArray *signalAccounts = [self.signalAccounts mutableCopy]; - - NSString *_Nullable localNumber = self.tsAccountManager.localNumber; - OWSAssertDebug(localNumber); - if (localNumber) { - BOOL hasLocalNumber = NO; - for (SignalAccount *signalAccount in signalAccounts) { - hasLocalNumber |= [signalAccount.recipientId isEqualToString:localNumber]; - } - if (!hasLocalNumber) { - SignalAccount *signalAccount = [[SignalAccount alloc] initWithRecipientId:localNumber]; - // OWSContactsOutputStream requires all signalAccount to have a contact. - signalAccount.contact = [[Contact alloc] initWithSystemContact:[CNContact new]]; - [signalAccounts addObject:signalAccount]; - } - } // TODO use temp file stream to avoid loading everything into memory at once // First though, we need to re-engineer our attachment process to accept streams (encrypting with stream, diff --git a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m index 24b45947a..aba11134a 100644 --- a/SignalServiceKit/src/Messages/OWSMessageDecrypter.m +++ b/SignalServiceKit/src/Messages/OWSMessageDecrypter.m @@ -431,7 +431,7 @@ NSError *EnsureDecryptError(NSError *_Nullable error, NSString *fallbackErrorDes sessionStore:self.primaryStorage preKeyStore:self.primaryStorage signedPreKeyStore:self.primaryStorage - identityKeyStore:self.primaryStorage + identityKeyStore:self.identityManager recipientID:recipientId deviceID:deviceId]; diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index 3a72a6de0..70da59c56 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1020,8 +1020,6 @@ NS_ASSUME_NONNULL_BEGIN messageType:TSInfoMessageTypeGroupUpdate customMessage:updateMessage]; [infoMessage saveWithTransaction:transaction]; - // Loki: if there is a update of group members, we should establish a session with the new members. - [self establishSessionsWithMembersIfNeeded:newGroupModel.groupMemberIds forThread:newGroupThread transaction:transaction]; } else if (transcript.isGroupQuit) { TSGroupThread *groupThread = [TSGroupThread getOrCreateThreadWithGroupId:transcript.dataMessage.group.id groupType:closedGroup transaction:transaction]; [groupThread leaveGroupWithTransaction:transaction]; @@ -1112,9 +1110,17 @@ NS_ASSUME_NONNULL_BEGIN GroupParser *parser = [[GroupParser alloc] initWithData:data]; NSArray *groupModels = [parser parseGroupModels]; for (TSGroupModel *groupModel in groupModels) { - TSGroupThread *thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction]; - [thread saveWithTransaction:transaction]; - [self establishSessionsWithMembersIfNeeded:groupModel.groupMemberIds forThread:thread transaction:transaction]; + TSGroupThread *thread = [TSGroupThread threadWithGroupId:groupModel.groupId transaction:transaction]; + if (thread == nil) { + thread = [TSGroupThread getOrCreateThreadWithGroupModel:groupModel transaction:transaction]; + [thread saveWithTransaction:transaction]; + [self establishSessionsWithMembersIfNeeded:groupModel.groupMemberIds forThread:thread transaction:transaction]; + TSInfoMessage *infoMessage = [[TSInfoMessage alloc] initWithTimestamp:NSDate.ows_millisecondTimeStamp + inThread:thread + messageType:TSInfoMessageTypeGroupUpdate + customMessage:@"You have joined the group."]; + [infoMessage saveWithTransaction:transaction]; + } } } } else {