From 093a79045d606d12a257483fe7c3d63cbf9a1ddd Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 20 Feb 2026 14:05:41 -0500 Subject: [PATCH] Fix incorrect sender key state for mismatch/stale devices. --- .../signalservice/api/SignalServiceMessageSender.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index e7be79e5e8..ff5c8e9ef3 100644 --- a/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -2924,6 +2924,11 @@ public class SignalServiceMessageSender { Log.w(TAG, "[handleMismatchedDevices] Address: " + recipient.getIdentifier() + ", ExtraDevices: " + mismatchedDevices.getExtraDevices() + ", MissingDevices: " + mismatchedDevices.getMissingDevices()); archiveSessions(recipient, mismatchedDevices.getExtraDevices()); + ArrayList mismatchedDeviceIds = new ArrayList<>(); + mismatchedDeviceIds.addAll(mismatchedDevices.getExtraDevices()); + mismatchedDeviceIds.addAll(mismatchedDevices.getMissingDevices()); + clearSenderKeySharedWith(recipient, mismatchedDeviceIds); + for (int missingDeviceId : mismatchedDevices.getMissingDevices()) { PreKeyBundle preKey = NetworkResultUtil.toPreKeysLegacy(keysApi.getPreKey(recipient, missingDeviceId)); @@ -2942,6 +2947,7 @@ public class SignalServiceMessageSender { private void handleStaleDevices(SignalServiceAddress recipient, StaleDevices staleDevices) { Log.w(TAG, "[handleStaleDevices] Address: " + recipient.getIdentifier() + ", StaleDevices: " + staleDevices.getStaleDevices()); archiveSessions(recipient, staleDevices.getStaleDevices()); + clearSenderKeySharedWith(recipient, staleDevices.getStaleDevices()); } public void handleChangeNumberMismatchDevices(@Nonnull MismatchedDevices mismatchedDevices) @@ -2958,6 +2964,10 @@ public class SignalServiceMessageSender { } } + private void clearSenderKeySharedWith(SignalServiceAddress recipient, List deviceIds) { + aciStore.clearSenderKeySharedWith(convertToProtocolAddresses(recipient, deviceIds)); + } + private List convertToProtocolAddresses(SignalServiceAddress recipient, List devices) { List addresses = new ArrayList<>(devices.size());