From da966753a192bf5ed813e3716e06e6a0a132587e Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 3 Mar 2026 10:32:19 -0500 Subject: [PATCH] Guard against invalid authors in directionless messages in archive export. --- .../thoughtcrime/securesms/backup/v2/ArchiveErrorCases.kt | 4 ++++ .../securesms/backup/v2/exporters/ChatItemArchiveExporter.kt | 5 +++++ 2 files changed, 9 insertions(+) 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 61df38a6c4..3c9b7fff64 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 @@ -155,6 +155,10 @@ object ExportSkips { return log(sentTimestamp, "An incoming message author did not have an aci or e164.") } + fun directionlessMessageAuthorDoesNotHaveAciOrE164(sentTimestamp: Long): String { + return log(sentTimestamp, "A directionlessmessage author did not have an aci or e164.") + } + fun outgoingMessageToReleaseNotesChat(sentTimestamp: Long): String { return log(sentTimestamp, "An outgoing message was sent to the release notes chat.") } 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 da368a5590..85089e5060 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 @@ -1705,6 +1705,11 @@ private fun ChatItem.validateChatItem(exportState: ExportState, selfRecipientId: return null } + if (this.directionless != null && this.authorId != selfRecipientId.toLong() && exportState.recipientIdToAci[this.authorId] == null && exportState.recipientIdToE164[this.authorId] == null) { + Log.w(TAG, ExportSkips.directionlessMessageAuthorDoesNotHaveAciOrE164(this.dateSent)) + return null + } + if (this.outgoing != null && exportState.releaseNoteRecipientId != null && exportState.threadIdToRecipientId[this.chatId] == exportState.releaseNoteRecipientId) { Log.w(TAG, ExportSkips.outgoingMessageToReleaseNotesChat(this.dateSent)) return null