From f4c1e344027af541931c816809e2e4184321a27d Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 6 Nov 2020 15:58:10 -0500 Subject: [PATCH] Enforce max envelope size in more places. --- .../securesms/util/FeatureFlags.java | 3 ++- .../api/SignalServiceMessageSender.java | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 0f0ec4c24..259ba3c62 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -107,7 +107,8 @@ public final class FeatureFlags { private static final Set HOT_SWAPPABLE = Sets.newHashSet( GROUPS_V2_JOIN_VERSION, VERIFY_V2, - CLIENT_EXPIRATION + CLIENT_EXPIRATION, + MAX_ENVELOPE_SIZE ); /** diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index 107655c21..06d23aeb1 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -701,13 +701,7 @@ public class SignalServiceMessageSender { builder.setTimestamp(message.getTimestamp()); - byte[] content = container.setDataMessage(builder).build().toByteArray(); - - if (maxEnvelopeSize > 0 && content.length > maxEnvelopeSize) { - throw new ContentTooLargeException(content.length); - } - - return content; + return enforceMaxContentSize(container.setDataMessage(builder).build().toByteArray()); } private byte[] createCallContent(SignalServiceCallMessage callMessage) { @@ -1261,6 +1255,8 @@ public class SignalServiceMessageSender { CancelationSignal cancelationSignal) throws IOException { + enforceMaxContentSize(content); + long startTime = System.currentTimeMillis(); List> futureResults = new LinkedList<>(); Iterator recipientIterator = recipients.iterator(); @@ -1325,6 +1321,8 @@ public class SignalServiceMessageSender { CancelationSignal cancelationSignal) throws UntrustedIdentityException, IOException { + enforceMaxContentSize(content); + long startTime = System.currentTimeMillis(); for (int i = 0; i < RETRY_COUNT; i++) { @@ -1591,6 +1589,13 @@ public class SignalServiceMessageSender { return results; } + private byte[] enforceMaxContentSize(byte[] content) { + if (maxEnvelopeSize > 0 && content.length > maxEnvelopeSize) { + throw new ContentTooLargeException(content.length); + } + return content; + } + public static interface EventListener { public void onSecurityEvent(SignalServiceAddress address); }