From 32894ff0a4158c685ddeafb34b008ad5ca20a2e4 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Thu, 30 Oct 2025 16:22:05 -0400 Subject: [PATCH] Add additional validations around incoming message on export. --- .../thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt | 8 ++++++++ .../thoughtcrime/securesms/backup/v2/BackupRepository.kt | 1 + .../backup/v2/exporters/ChatItemArchiveExporter.kt | 8 ++++---- .../backup/v2/processor/RecipientArchiveProcessor.kt | 3 +++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt index d8fdd8490b..15185213e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt @@ -139,6 +139,14 @@ object ExportSkips { return log(sentTimestamp, "A chat update that only makes sense for individual chats was found in a different kind of chat.") } + fun individualChatUpdateNotAuthoredBySelf(sentTimestamp: Long): String { + return log(sentTimestamp, "A chat update that only makes sense to be authored by self has a different author.") + } + + fun incomingMessageAuthorDoesNotHaveAciOrE164(sentTimestamp: Long): String { + return log(sentTimestamp, "An incoming message author did not have an aci or e164.") + } + fun callWithMissingRecipient(sentTimestamp: Long): String { return log(sentTimestamp, "A call had a ringer with no matching exported Recipient.") } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 9b55730d54..bea1bbbfca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -2429,6 +2429,7 @@ class ExportState( val threadIdToRecipientId: MutableMap = hashMapOf() val recipientIdToAci: MutableMap = hashMapOf() val aciToRecipientId: MutableMap = hashMapOf() + val recipientIdToE164: MutableMap = hashMapOf() val customChatColorIds: MutableSet = hashSetOf() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt index e0354c727b..32cf135c27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/exporters/ChatItemArchiveExporter.kt @@ -265,22 +265,22 @@ class ChatItemArchiveExporter( } MessageTypes.isReportedSpam(record.type) -> { - builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.REPORTED_SPAM).takeIf { builder.authorId == selfRecipientId.toLong() } + builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.REPORTED_SPAM) transformTimer.emit("simple-update") } MessageTypes.isMessageRequestAccepted(record.type) -> { - builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.MESSAGE_REQUEST_ACCEPTED).takeIf { builder.authorId == selfRecipientId.toLong() } + builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.MESSAGE_REQUEST_ACCEPTED) transformTimer.emit("simple-update") } MessageTypes.isBlocked(record.type) -> { - builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.BLOCKED).takeIf { builder.authorId == selfRecipientId.toLong() } + builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.BLOCKED) transformTimer.emit("simple-update") } MessageTypes.isUnblocked(record.type) -> { - builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.UNBLOCKED).takeIf { builder.authorId == selfRecipientId.toLong() } + builder.updateMessage = simpleUpdate(SimpleChatUpdate.Type.UNBLOCKED) transformTimer.emit("simple-update") } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt index dba0083de6..31edfe280b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientArchiveProcessor.kt @@ -68,6 +68,9 @@ object RecipientArchiveProcessor { exportState.recipientIdToAci[recipient.id] = it exportState.aciToRecipientId[ServiceId.ACI.parseOrThrow(it).toString()] = recipient.id } + recipient.contact?.e164?.let { + exportState.recipientIdToE164[recipient.id] = it + } emitter.emit(Frame(recipient = recipient)) }