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 a082752d9e..e5a46c2b30 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 @@ -2114,10 +2114,12 @@ public class SignalServiceMessageSender { } for (int i = 0; i < RETRY_COUNT; i++) { - GroupTargetInfo targetInfo = buildGroupTargetInfo(recipients); + GroupTargetInfo targetInfo = buildGroupTargetInfo(recipients); + final GroupTargetInfo targetInfoSnapshot = targetInfo; + Set sharedWith = aciStore.getSenderKeySharedWith(distributionId); List needsSenderKey = targetInfo.destinations.stream() - .filter(a -> !sharedWith.contains(a)) + .filter(a -> !sharedWith.contains(a) || targetInfoSnapshot.sessions.get(a) == null) .map(a -> ServiceId.parseOrThrow(a.getName())) .distinct() .map(SignalServiceAddress::new) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java index adbef7558e..8259872d7a 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java @@ -56,6 +56,11 @@ public class SignalSealedSessionCipher { { try (SignalSessionLock.Lock unused = lock.acquire()) { List recipientSessions = recipients.stream().map(sessionMap::get).collect(Collectors.toList()); + + if (recipientSessions.contains(null)) { + throw new NoSessionException("No session for some recipients"); + } + return cipher.multiRecipientEncrypt(recipients, recipientSessions, content); } }