From 355b320c92be944ea28ebc8d6071e412b9c102ec Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Fri, 26 Jun 2026 15:39:25 -0400 Subject: [PATCH] Don't attempt to send empty message bundles when changing numbers --- .../storage/ChangeNumberManager.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManager.java index 6b1177b02..9ed5ed051 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ChangeNumberManager.java @@ -158,21 +158,24 @@ public class ChangeNumberManager { final Account updatedAccount = accountsManager.changeNumber( account.getIdentifier(IdentityType.ACI), number, pniIdentityKey, deviceSignedPreKeys, devicePqLastResortPreKeys, pniRegistrationIds); - try { - // Now that we've actually updated the account, populate the "updated PNI" field on all envelopes - messagesByDeviceId.replaceAll((_, envelope) -> - envelope.toBuilder().setUpdatedPni(UUIDUtil.toByteString(updatedAccount.getIdentifier(IdentityType.PNI))) - .build()); + if (!messagesByDeviceId.isEmpty()) { + try { + // Now that we've actually updated the account, populate the "updated PNI" field on all envelopes + messagesByDeviceId.replaceAll((_, envelope) -> + envelope.toBuilder().setUpdatedPni(UUIDUtil.toByteString(updatedAccount.getIdentifier(IdentityType.PNI))) + .build()); - messageSender.sendMessages(updatedAccount, - serviceIdentifier, - messagesByDeviceId, - registrationIdsByDeviceId, - Optional.of(Device.PRIMARY_ID), - senderUserAgent); - } catch (final RuntimeException e) { - logger.warn("Changed number but could not send all device messages for {}", account.getIdentifier(IdentityType.ACI), e); - throw e; + messageSender.sendMessages(updatedAccount, + serviceIdentifier, + messagesByDeviceId, + registrationIdsByDeviceId, + Optional.of(Device.PRIMARY_ID), + senderUserAgent); + } catch (final RuntimeException e) { + logger.warn("Changed number but could not send all device messages for {}", + account.getIdentifier(IdentityType.ACI), e); + throw e; + } } return updatedAccount;