From a770b03fe6f4c38607bc190e3930cbb59140dc33 Mon Sep 17 00:00:00 2001 From: ziggy Date: Fri, 10 Jul 2026 17:54:03 +0300 Subject: [PATCH] Complete invalid envelope diagnostics --- .../helper/IncomingMessageHandler.java | 6 ++++- .../helper/IncomingMessageHandlerTest.java | 23 +++++++++++++++++++ .../signal-cli/reachability-metadata.json | 12 ++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) 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 62545c52..b993ca83 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 @@ -271,7 +271,11 @@ public final class IncomingMessageHandler { final EnvelopeMetadata envelopeMetadata, final Content content ) { - final var dataMessage = content.dataMessage; + final var dataMessage = content.dataMessage != null + ? content.dataMessage + : content.syncMessage != null && content.syncMessage.sent != null + ? content.syncMessage.sent.message + : null; final Integer bodyLength = dataMessage == null ? null : dataMessage.body == null ? 0 : dataMessage.body.length(); diff --git a/lib/src/test/java/org/asamk/signal/manager/helper/IncomingMessageHandlerTest.java b/lib/src/test/java/org/asamk/signal/manager/helper/IncomingMessageHandlerTest.java index 33ecee72..65e0ba83 100644 --- a/lib/src/test/java/org/asamk/signal/manager/helper/IncomingMessageHandlerTest.java +++ b/lib/src/test/java/org/asamk/signal/manager/helper/IncomingMessageHandlerTest.java @@ -8,6 +8,7 @@ import org.whispersystems.signalservice.api.messages.EnvelopeContentValidator; import org.whispersystems.signalservice.internal.push.BodyRange; import org.whispersystems.signalservice.internal.push.Content; import org.whispersystems.signalservice.internal.push.DataMessage; +import org.whispersystems.signalservice.internal.push.SyncMessage; import java.util.List; @@ -37,4 +38,26 @@ class IncomingMessageHandlerTest { assertEquals(List.of(new InvalidEnvelopeContentException.InvalidBodyRange(0, 4, 3, "STYLE_BOLD")), exception.getInvalidBodyRanges()); } + + @Test + void invalidEnvelopeContentReportsOutOfBoundsBodyRangeFromSyncMessage() { + final var sender = ACI.parseOrThrow("2a04f0cc-199f-4b93-99d8-13c6b10a70de"); + final var bodyRange = new BodyRange.Builder().start(-1).length(2).mentionAci(sender.toString()).build(); + final var dataMessage = new DataMessage.Builder().body("hello").bodyRanges(List.of(bodyRange)).build(); + final var sent = new SyncMessage.Sent.Builder().message(dataMessage).build(); + final var content = new Content.Builder().syncMessage(new SyncMessage.Builder().sent(sent).build()).build(); + final var metadata = new EnvelopeMetadata(sender, null, 2, false, null, sender, 1); + final var validationResult = new EnvelopeContentValidator.Result.Invalid( + "[DataMessage] Body range with out-of-bounds start/length!", + new Throwable()); + + final var exception = IncomingMessageHandler.createInvalidEnvelopeContentException(validationResult, + metadata, + content); + + assertEquals(InvalidEnvelopeContentException.DATA_MESSAGE_BODY_RANGE_OUT_OF_BOUNDS, exception.getCode()); + assertEquals(5, exception.getBodyLength()); + assertEquals(List.of(new InvalidEnvelopeContentException.InvalidBodyRange(0, -1, 2, "MENTION")), + exception.getInvalidBodyRanges()); + } } diff --git a/src/main/resources/META-INF/native-image/org.asamk/signal-cli/reachability-metadata.json b/src/main/resources/META-INF/native-image/org.asamk/signal-cli/reachability-metadata.json index e69e2df6..9576f887 100644 --- a/src/main/resources/META-INF/native-image/org.asamk/signal-cli/reachability-metadata.json +++ b/src/main/resources/META-INF/native-image/org.asamk/signal-cli/reachability-metadata.json @@ -2949,6 +2949,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "type": "org.asamk.signal.json.JsonError$Details", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "type": "org.asamk.signal.json.JsonGroupInfo", "allDeclaredFields": true, @@ -3419,6 +3425,12 @@ { "type": "org.asamk.signal.logging.LogConfigurator" }, + { + "type": "org.asamk.signal.manager.api.InvalidEnvelopeContentException$InvalidBodyRange", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "type": "org.asamk.signal.manager.api.PhoneNumberSharingMode", "allDeclaredFields": true