From 5daa027c102ae2245627c33f3171fd91a6dd2232 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 8 Apr 2021 16:18:42 -0400 Subject: [PATCH] Disallow SMS/MMS sends to UUID-only recipients. --- .../securesms/conversation/ConversationActivity.java | 5 ++++- .../java/org/thoughtcrime/securesms/jobs/MmsSendJob.java | 8 ++++++++ .../java/org/thoughtcrime/securesms/jobs/SmsSendJob.java | 6 +++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index 74f45ab7ae..494b5d72b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -1517,7 +1517,10 @@ public class ConversationActivity extends PassphraseRequiredActivity sendButton.resetAvailableTransports(isMediaMessage); if (!isSecureText && !isPushGroupConversation()) sendButton.disableTransport(Type.TEXTSECURE); - if (recipient.get().isPushGroup()) sendButton.disableTransport(Type.SMS); + + if (recipient.get().isPushGroup() || (!recipient.get().isMmsGroup() && !recipient.get().hasSmsAddress())) { + sendButton.disableTransport(Type.SMS); + } if (!recipient.get().isPushGroup() && recipient.get().isForceSmsSelection()) { sendButton.setDefaultTransport(Type.SMS); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java index 49639b722a..6bb5d933f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java @@ -242,6 +242,10 @@ public final class MmsSendJob extends SendJob { List members = DatabaseFactory.getGroupDatabase(context).getGroupMembers(message.getRecipient().requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); for (Recipient member : members) { + if (!member.hasSmsAddress()) { + throw new UndeliverableMessageException("One of the group recipients did not have an SMS address! " + member.getId()); + } + if (message.getDistributionType() == ThreadDatabase.DistributionTypes.BROADCAST) { req.addBcc(new EncodedStringValue(member.requireSmsAddress())); } else { @@ -249,6 +253,10 @@ public final class MmsSendJob extends SendJob { } } } else { + if (!message.getRecipient().hasSmsAddress()) { + throw new UndeliverableMessageException("Recipient did not have an SMS address! " + message.getRecipient().getId()); + } + req.addTo(new EncodedStringValue(message.getRecipient().requireSmsAddress())); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java index aeecdb29f5..dd3339d4ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java @@ -72,7 +72,7 @@ public class SmsSendJob extends SendJob { } @Override - public void onSend() throws NoSuchMessageException, TooManyRetriesException { + public void onSend() throws NoSuchMessageException, TooManyRetriesException, UndeliverableMessageException { if (runAttempt >= MAX_ATTEMPTS) { warn(TAG, "Hit the retry limit. Failing."); throw new TooManyRetriesException(); @@ -86,6 +86,10 @@ public class SmsSendJob extends SendJob { return; } + if (!record.getRecipient().hasSmsAddress()) { + throw new UndeliverableMessageException("Recipient didn't have an SMS address! " + record.getRecipient().getId()); + } + try { log(TAG, String.valueOf(record.getDateSent()), "Sending message: " + messageId + " (attempt " + runAttempt + ")"); deliver(record);