From d7314ec2a46868a04a4fca782ed9be307045b83a Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Sun, 24 Sep 2023 21:20:54 -0400 Subject: [PATCH] Fix NPE in group change message processing. --- .../securesms/messages/SignalServiceProtoUtil.kt | 4 ++++ .../org/thoughtcrime/securesms/mms/MessageGroupContext.java | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt index 33e14aee61..c23507156a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SignalServiceProtoUtil.kt @@ -6,6 +6,7 @@ import okio.ByteString import org.signal.core.util.orNull import org.signal.libsignal.protocol.message.DecryptionErrorMessage import org.signal.libsignal.zkgroup.groups.GroupMasterKey +import org.signal.storageservice.protos.groups.local.DecryptedGroupChange import org.thoughtcrime.securesms.attachments.Attachment import org.thoughtcrime.securesms.attachments.PointerAttachment import org.thoughtcrime.securesms.database.model.StoryType @@ -32,6 +33,9 @@ import kotlin.time.Duration.Companion.seconds object SignalServiceProtoUtil { + @JvmStatic + val emptyGroupChange: DecryptedGroupChange by lazy { DecryptedGroupChange() } + /** Contains some user data that affects the conversation */ val DataMessage.hasRenderableContent: Boolean get() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java index 67e26346cf..c94ce73ce6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java @@ -11,6 +11,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; +import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.Base64; @@ -161,12 +162,12 @@ public final class MessageGroupContext { } public @NonNull DecryptedGroupChange getChange() { - return decryptedGroupV2Context.change; + return decryptedGroupV2Context.change != null ? decryptedGroupV2Context.change : SignalServiceProtoUtil.getEmptyGroupChange(); } public @NonNull List getAllActivePendingAndRemovedMembers() { DecryptedGroup groupState = decryptedGroupV2Context.groupState; - DecryptedGroupChange groupChange = decryptedGroupV2Context.change; + DecryptedGroupChange groupChange = getChange(); return Stream.of(DecryptedGroupUtil.toAciList(groupState.members), DecryptedGroupUtil.pendingToServiceIdList(groupState.pendingMembers),