Fix PNI crash in in group processing.

fork-5.53.8
Cody Henthorne 2022-05-12 16:11:44 -04:00 zatwierdzone przez Alex Hart
rodzic dc095c9db4
commit 9bc4dfc3f6
4 zmienionych plików z 10 dodań i 8 usunięć

Wyświetl plik

@ -72,7 +72,7 @@ final class GroupsV2UpdateMessageProducer {
*/
UpdateDescription describeNewGroup(@NonNull DecryptedGroup group, @NonNull DecryptedGroupChange decryptedGroupChange) {
Optional<DecryptedPendingMember> selfPending = DecryptedGroupUtil.findPendingByUuid(group.getPendingMembersList(), selfIds.getAci().uuid());
if (!selfPending.isPresent()) {
if (!selfPending.isPresent() && selfIds.getPni() != null) {
selfPending = DecryptedGroupUtil.findPendingByUuid(group.getPendingMembersList(), selfIds.getPni().uuid());
}
@ -89,7 +89,9 @@ final class GroupsV2UpdateMessageProducer {
}
}
if (DecryptedGroupUtil.findMemberByUuid(group.getMembersList(), selfIds.getAci().uuid()).isPresent() || DecryptedGroupUtil.findMemberByUuid(group.getMembersList(), selfIds.getPni().uuid()).isPresent()) {
if (DecryptedGroupUtil.findMemberByUuid(group.getMembersList(), selfIds.getAci().uuid()).isPresent() ||
(selfIds.getPni() != null && DecryptedGroupUtil.findMemberByUuid(group.getMembersList(), selfIds.getPni().uuid()).isPresent())
) {
return updateDescription(context.getString(R.string.MessageRecord_you_joined_the_group), R.drawable.ic_update_group_add_16);
} else {
return updateDescription(context.getString(R.string.MessageRecord_group_updated), R.drawable.ic_update_group_16);

Wyświetl plik

@ -270,7 +270,7 @@ public abstract class MessageRecord extends DisplayRecord {
try {
byte[] decoded = Base64.decode(body);
DecryptedGroupV2Context decryptedGroupV2Context = DecryptedGroupV2Context.parseFrom(decoded);
GroupsV2UpdateMessageProducer updateMessageProducer = new GroupsV2UpdateMessageProducer(context, SignalStore.account().requireServiceIds(), recipientClickHandler);
GroupsV2UpdateMessageProducer updateMessageProducer = new GroupsV2UpdateMessageProducer(context, SignalStore.account().getServiceIds(), recipientClickHandler);
if (decryptedGroupV2Context.hasChange() && (decryptedGroupV2Context.getGroupState().getRevision() != 0 || decryptedGroupV2Context.hasPreviousGroupState())) {
return UpdateDescription.concatWithNewLines(updateMessageProducer.describeChanges(decryptedGroupV2Context.getPreviousGroupState(), decryptedGroupV2Context.getChange()));

Wyświetl plik

@ -111,8 +111,8 @@ internal class AccountValues internal constructor(store: KeyValueStore) : Signal
putString(KEY_PNI, pni.toString())
}
fun requireServiceIds(): ServiceIds {
return ServiceIds(requireAci(), requirePni())
fun getServiceIds(): ServiceIds {
return ServiceIds(requireAci(), pni)
}
/** The local user's E164. */

Wyświetl plik

@ -10,13 +10,13 @@ import java.util.UUID
* Helper for dealing with [ServiceId] matching when you only care that either of your
* service ids match but don't care which one.
*/
data class ServiceIds(val aci: ACI, val pni: PNI) {
data class ServiceIds(val aci: ACI, val pni: PNI?) {
private val aciByteString: ByteString by lazy { UuidUtil.toByteString(aci.uuid()) }
private val pniByteString: ByteString by lazy { UuidUtil.toByteString(pni.uuid()) }
private val pniByteString: ByteString? by lazy { pni?.let { UuidUtil.toByteString(it.uuid()) } }
fun matches(uuid: UUID): Boolean {
return uuid == aci.uuid() || uuid == pni.uuid()
return uuid == aci.uuid() || uuid == pni?.uuid()
}
fun matches(uuid: ByteString): Boolean {