Fix incorrect sender key state for mismatch/stale devices.

This commit is contained in:
Cody Henthorne
2026-02-20 14:05:41 -05:00
parent e4928b0084
commit 093a79045d

View File

@@ -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<Integer> 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<Integer> deviceIds) {
aciStore.clearSenderKeySharedWith(convertToProtocolAddresses(recipient, deviceIds));
}
private List<SignalProtocolAddress> convertToProtocolAddresses(SignalServiceAddress recipient, List<Integer> devices) {
List<SignalProtocolAddress> addresses = new ArrayList<>(devices.size());