Improve message validation.

This commit is contained in:
Greyson Parrelli 2025-01-09 15:36:18 -05:00
parent b2c09cf00b
commit 8d8c21f228

View file

@ -8,7 +8,6 @@ import org.signal.libsignal.zkgroup.groups.GroupMasterKey
import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation
import org.whispersystems.signalservice.api.push.ServiceId
import org.whispersystems.signalservice.api.push.ServiceId.ACI
import org.whispersystems.signalservice.api.push.ServiceId.PNI
import org.whispersystems.signalservice.internal.push.AttachmentPointer
import org.whispersystems.signalservice.internal.push.Content
import org.whispersystems.signalservice.internal.push.DataMessage
@ -31,11 +30,7 @@ object EnvelopeContentValidator {
fun validate(envelope: Envelope, content: Content, localAci: ACI): Result {
if (envelope.type == Envelope.Type.PLAINTEXT_CONTENT) {
val result: Result? = createPlaintextResultIfInvalid(content)
if (result != null) {
return result
}
validatePlaintextContent(content)?.let { return it }
}
if (envelope.sourceServiceId != null && envelope.sourceServiceId.isInvalidServiceId()) {
@ -370,39 +365,41 @@ object EnvelopeContentValidator {
}
}
private fun createPlaintextResultIfInvalid(content: Content): Result? {
private fun validatePlaintextContent(content: Content): Result? {
val errors: MutableList<String> = mutableListOf()
if (content.decryptionErrorMessage == null) {
errors += "Missing DecryptionErrorMessage"
}
if (content.storyMessage != null) {
errors += "Unexpected StoryMessage"
}
if (content.senderKeyDistributionMessage != null) {
errors += "Unexpected SenderKeyDistributionMessage"
}
if (content.callMessage != null) {
errors += "Unexpected CallMessage"
}
if (content.editMessage != null) {
errors += "Unexpected EditMessage"
}
if (content.nullMessage != null) {
errors += "Unexpected NullMessage"
}
if (content.pniSignatureMessage != null) {
errors += "Unexpected PniSignatureMessage"
}
if (content.receiptMessage != null) {
errors += "Unexpected ReceiptMessage"
if (content.dataMessage != null) {
errors += "Unexpected DataMessage"
}
if (content.syncMessage != null) {
errors += "Unexpected SyncMessage"
}
if (content.callMessage != null) {
errors += "Unexpected CallMessage"
}
if (content.nullMessage != null) {
errors += "Unexpected NullMessage"
}
if (content.receiptMessage != null) {
errors += "Unexpected ReceiptMessage"
}
if (content.typingMessage != null) {
errors += "Unexpected TypingMessage"
}
if (content.senderKeyDistributionMessage != null) {
errors += "Unexpected SenderKeyDistributionMessage"
}
if (content.storyMessage != null) {
errors += "Unexpected StoryMessage"
}
if (content.pniSignatureMessage != null) {
errors += "Unexpected PniSignatureMessage"
}
if (content.editMessage != null) {
errors += "Unexpected EditMessage"
}
return if (errors.isNotEmpty()) {
Result.Invalid("Invalid PLAINTEXT_CONTENT! Errors: $errors")