Filter out bad E164s from GV1 groups.

This commit is contained in:
Greyson Parrelli
2025-04-18 10:52:02 -04:00
committed by Cody Henthorne
parent e45eabc714
commit a2a10fb0c1
2 changed files with 11 additions and 0 deletions

View File

@@ -5,6 +5,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import org.signal.core.util.E164Util;
import org.signal.libsignal.zkgroup.InvalidInputException;
import org.signal.libsignal.zkgroup.groups.GroupMasterKey;
import org.signal.storageservice.protos.groups.local.DecryptedGroup;
@@ -16,6 +17,7 @@ import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.signal.core.util.Base64;
import org.thoughtcrime.securesms.util.SignalE164Util;
import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil;
import org.whispersystems.signalservice.api.push.ServiceId;
import org.whispersystems.signalservice.api.push.ServiceId.ACI;
@@ -128,6 +130,7 @@ public final class MessageGroupContext {
RecipientId selfId = Recipient.self().getId();
return Stream.of(groupContext.members)
.filter(m -> SignalE164Util.isPotentialE164(m.e164))
.map(m -> m.e164)
.withoutNulls()
.map(RecipientId::fromE164)

View File

@@ -53,6 +53,14 @@ object SignalE164Util {
return getFormatter().formatAsE164(input)
}
/**
* Returns true if the input string can be considered an E164. Specifically, it returns true if we could figure out how to format it as an E164.
*/
@JvmStatic
fun isPotentialE164(input: String): Boolean {
return formatAsE164(input) != null
}
private fun getFormatter(): E164Util.Formatter {
val localNumber = SignalStore.account.e164 ?: return defaultFormatter
val formatter = cachedFormatters[localNumber]