From 9163c0ca4d8e24f1a9aed5b5ecf38bdffab05e21 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 24 Apr 2025 16:45:26 -0400 Subject: [PATCH] Improve envelope timestamp validation. --- .../api/messages/EnvelopeContentValidator.kt | 2 +- .../messages/EnvelopeContentValidatorTest.kt | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt index e7502cdd5d..de848785da 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidator.kt @@ -77,7 +77,7 @@ object EnvelopeContentValidator { } if (dataMessage.timestamp != envelope.timestamp) { - Result.Invalid("[DataMessage] Timestamps don't match! envelope: ${envelope.timestamp}, content: ${dataMessage.timestamp}") + return Result.Invalid("[DataMessage] Timestamps don't match! envelope: ${envelope.timestamp}, content: ${dataMessage.timestamp}") } if (dataMessage.quote != null && dataMessage.quote.authorAci.isNullOrInvalidAci()) { diff --git a/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt new file mode 100644 index 0000000000..03da0a6186 --- /dev/null +++ b/libsignal-service/src/test/java/org/whispersystems/signalservice/api/messages/EnvelopeContentValidatorTest.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.messages + +import org.junit.Test +import org.whispersystems.signalservice.api.push.ServiceId +import org.whispersystems.signalservice.internal.push.Content +import org.whispersystems.signalservice.internal.push.DataMessage +import org.whispersystems.signalservice.internal.push.Envelope + +class EnvelopeContentValidatorTest { + + companion object { + private val SELF_ACI = ServiceId.ACI.parseOrThrow("0a5ebe7e-9de7-41a5-a25f-6ace4f8e11d1") + } + + @Test + fun `validate - ensure mismatched timestamps are marked invalid`() { + val envelope = Envelope( + timestamp = 1234 + ) + + val content = Content( + dataMessage = DataMessage( + timestamp = 12345 + ) + ) + + val result = EnvelopeContentValidator.validate(envelope, content, SELF_ACI) + assert(result is EnvelopeContentValidator.Result.Invalid) + } +}