Prevent duplicate member UUIDs in groups.

Fixes #10702
fork-5.53.8
Alan Evans 2021-01-25 13:06:15 -04:00 zatwierdzone przez GitHub
rodzic 409e7c41b4
commit 17fb815805
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 63 dodań i 1 usunięć

Wyświetl plik

@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@ -295,7 +296,20 @@ public final class DecryptedGroupUtil {
}
private static void applyAddMemberAction(DecryptedGroup.Builder builder, List<DecryptedMember> newMembersList) {
builder.addAllMembers(newMembersList);
if (newMembersList.isEmpty()) return;
LinkedHashMap<ByteString, DecryptedMember> members = new LinkedHashMap<>();
for (DecryptedMember member : builder.getMembersList()) {
members.put(member.getUuid(), member);
}
for (DecryptedMember member : newMembersList) {
members.put(member.getUuid(), member);
}
builder.clearMembers();
builder.addAllMembers(members.values());
removePendingAndRequestingMembersNowInGroup(builder);
}

Wyświetl plik

@ -82,6 +82,54 @@ public final class DecryptedGroupUtil_apply_Test {
newGroup);
}
@Test
public void apply_new_member_already_in_the_group() throws NotAbleToApplyGroupV2ChangeException {
DecryptedMember member1 = member(UUID.randomUUID());
DecryptedMember member2 = member(UUID.randomUUID());
DecryptedGroup newGroup = DecryptedGroupUtil.apply(DecryptedGroup.newBuilder()
.setRevision(10)
.addMembers(member1)
.addMembers(member2)
.build(),
DecryptedGroupChange.newBuilder()
.setRevision(11)
.addNewMembers(member2)
.build());
assertEquals(DecryptedGroup.newBuilder()
.setRevision(11)
.addMembers(member1)
.addMembers(member2)
.build(),
newGroup);
}
@Test
public void apply_new_member_already_in_the_group_by_uuid() throws NotAbleToApplyGroupV2ChangeException {
DecryptedMember member1 = member(UUID.randomUUID());
UUID member2Uuid = UUID.randomUUID();
DecryptedMember member2a = member(member2Uuid, newProfileKey());
DecryptedMember member2b = member(member2Uuid, newProfileKey());
DecryptedGroup newGroup = DecryptedGroupUtil.apply(DecryptedGroup.newBuilder()
.setRevision(10)
.addMembers(member1)
.addMembers(member2a)
.build(),
DecryptedGroupChange.newBuilder()
.setRevision(11)
.addNewMembers(member2b)
.build());
assertEquals(DecryptedGroup.newBuilder()
.setRevision(11)
.addMembers(member1)
.addMembers(member2b)
.build(),
newGroup);
}
@Test
public void apply_remove_member() throws NotAbleToApplyGroupV2ChangeException {
DecryptedMember member1 = member(UUID.randomUUID());