Complete invalid envelope diagnostics

This commit is contained in:
ziggy 2026-07-10 17:54:03 +03:00
parent 1cce283aca
commit a770b03fe6
3 changed files with 40 additions and 1 deletions

View File

@ -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();

View File

@ -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());
}
}

View File

@ -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