From: AsamK Date: Fri, 7 Oct 2022 19:50:07 +0000 (+0200) Subject: Fix issue when receiving invalid message from invalid sender X-Git-Tag: v0.11.4~22 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/ca5951861acb790345648b426fe91b41cbcc5da7 Fix issue when receiving invalid message from invalid sender --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java index 9a4a0af0..569168de 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/IncomingMessageHandler.java @@ -139,17 +139,23 @@ public final class IncomingMessageHandler { } else { final var senderProfile = context.getProfileHelper().getRecipientProfile(sender); final var selfProfile = context.getProfileHelper().getSelfProfile(); - final var serviceId = ServiceId.parseOrThrow(e.getSender()); - if ((!sender.equals(account.getSelfRecipientId()) || e.getSenderDevice() != account.getDeviceId()) - && senderProfile != null - && senderProfile.getCapabilities().contains(Profile.Capability.senderKey) - && selfProfile != null - && selfProfile.getCapabilities().contains(Profile.Capability.senderKey)) { - logger.debug("Received invalid message, requesting message resend."); - actions.add(new SendRetryMessageRequestAction(sender, serviceId, e, envelope)); + final var serviceId = ServiceId.parseOrNull(e.getSender()); + if (serviceId != null) { + final var isSelf = sender.equals(account.getSelfRecipientId()) + && e.getSenderDevice() == account.getDeviceId(); + final var isSenderSenderKeyCapable = senderProfile != null && senderProfile.getCapabilities() + .contains(Profile.Capability.senderKey); + final var isSelfSenderKeyCapable = selfProfile != null && selfProfile.getCapabilities() + .contains(Profile.Capability.senderKey); + if (!isSelf && isSenderSenderKeyCapable && isSelfSenderKeyCapable) { + logger.debug("Received invalid message, requesting message resend."); + actions.add(new SendRetryMessageRequestAction(sender, serviceId, e, envelope)); + } else { + logger.debug("Received invalid message, queuing renew session action."); + actions.add(new RenewSessionAction(sender, serviceId)); + } } else { - logger.debug("Received invalid message, queuing renew session action."); - actions.add(new RenewSessionAction(sender, serviceId)); + logger.debug("Received invalid message from invalid sender: {}", e.getSender()); } } exception = e;