From f1a72dd01aaea8f4a69dfc7aa56d90a6bb18ad41 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 4 Jun 2026 11:22:14 -0400 Subject: [PATCH] Use CDN number instead of parsing identifier for attachment remote id. --- .../conversation/ConversationItemPreviewer.kt | 2 +- .../org/signal/benchmark/setup/TestMessages.kt | 4 ++-- .../securesms/attachments/AttachmentExtensions.kt | 2 +- .../backup/v2/DatabaseAttachmentArchiveUtil.kt | 2 +- .../backup/v2/util/ArchiveConverterExtensions.kt | 2 +- .../securesms/jobs/AttachmentDownloadJob.kt | 2 +- .../thoughtcrime/securesms/jobs/PushSendJob.kt | 2 +- .../util/SignalServiceTransformExtensions.kt | 2 +- .../messages/SignalServiceAttachmentRemoteId.kt | 15 +++++++++------ 9 files changed, 18 insertions(+), 15 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt index 651ae3677b..a745c9e6b1 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt @@ -138,7 +138,7 @@ class ConversationItemPreviewer { private fun attachment(): SignalServiceAttachmentPointer { return SignalServiceAttachmentPointer( Cdn.CDN_3.cdnNumber, - SignalServiceAttachmentRemoteId.from(""), + SignalServiceAttachmentRemoteId.from("", Cdn.CDN_3.cdnNumber), "image/webp", null, Optional.empty(), diff --git a/app/src/benchmarkShared/java/org/signal/benchmark/setup/TestMessages.kt b/app/src/benchmarkShared/java/org/signal/benchmark/setup/TestMessages.kt index 1a038eab9e..8d26c61250 100644 --- a/app/src/benchmarkShared/java/org/signal/benchmark/setup/TestMessages.kt +++ b/app/src/benchmarkShared/java/org/signal/benchmark/setup/TestMessages.kt @@ -146,7 +146,7 @@ object TestMessages { private fun imageAttachment(): SignalServiceAttachmentPointer { return SignalServiceAttachmentPointer( Cdn.S3.cdnNumber, - SignalServiceAttachmentRemoteId.from(""), + SignalServiceAttachmentRemoteId.from("", Cdn.S3.cdnNumber), "image/webp", null, Optional.empty(), @@ -170,7 +170,7 @@ object TestMessages { private fun voiceAttachment(): SignalServiceAttachmentPointer { return SignalServiceAttachmentPointer( Cdn.S3.cdnNumber, - SignalServiceAttachmentRemoteId.from(""), + SignalServiceAttachmentRemoteId.from("", Cdn.S3.cdnNumber), "audio/aac", null, Optional.empty(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt index 2a1975e050..56561d715c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentExtensions.kt @@ -31,7 +31,7 @@ fun Attachment.toAttachmentPointer(context: Context): AttachmentPointer? { } try { - val remoteId = SignalServiceAttachmentRemoteId.from(attachment.remoteLocation!!) + val remoteId = SignalServiceAttachmentRemoteId.from(attachment.remoteLocation!!, attachment.cdn.cdnNumber) var attachmentWidth = attachment.width var attachmentHeight = attachment.height diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt index 8d45740d2b..2c6dc9c1c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/DatabaseAttachmentArchiveUtil.kt @@ -123,7 +123,7 @@ fun DatabaseAttachment.createArchiveAttachmentPointer(useArchiveCdn: Boolean): S throw InvalidAttachmentException("empty content id") } - SignalServiceAttachmentRemoteId.from(remoteLocation) to cdn.cdnNumber + SignalServiceAttachmentRemoteId.from(remoteLocation, cdn.cdnNumber) to cdn.cdnNumber } val key = Base64.decode(remoteKey) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt index b9fe5c740f..af41e104f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/util/ArchiveConverterExtensions.kt @@ -87,7 +87,7 @@ fun FilePointer?.toLocalAttachment( AttachmentType.TRANSIT -> { val signalAttachmentPointer = SignalServiceAttachmentPointer( cdnNumber = locatorInfo.transitCdnNumber ?: Cdn.CDN_0.cdnNumber, - remoteId = SignalServiceAttachmentRemoteId.from(locatorInfo.transitCdnKey!!), + remoteId = SignalServiceAttachmentRemoteId.from(locatorInfo.transitCdnKey!!, locatorInfo.transitCdnNumber ?: Cdn.CDN_0.cdnNumber), contentType = contentType, key = locatorInfo.key.toByteArray(), size = Optional.ofNullable(locatorInfo.size), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.kt index d136b62177..1401390f4a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.kt @@ -399,8 +399,8 @@ class AttachmentDownloadJob private constructor( } return try { - val remoteId = SignalServiceAttachmentRemoteId.from(attachment.remoteLocation) val cdnNumber = attachment.cdn.cdnNumber + val remoteId = SignalServiceAttachmentRemoteId.from(attachment.remoteLocation, cdnNumber) val key = Base64.decode(attachment.remoteKey) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.kt index 8ca106b0bd..505b40c7b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.kt @@ -282,7 +282,7 @@ abstract class PushSendJob protected constructor(parameters: Parameters) : BaseJ } try { - val remoteId = SignalServiceAttachmentRemoteId.from(attachment.remoteLocation!!) + val remoteId = SignalServiceAttachmentRemoteId.from(attachment.remoteLocation!!, attachment.cdn.cdnNumber) val key = Base64.decode(attachment.remoteKey!!) var width = attachment.width diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SignalServiceTransformExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/util/SignalServiceTransformExtensions.kt index 7c20670be8..4b2d4b1e80 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SignalServiceTransformExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SignalServiceTransformExtensions.kt @@ -215,7 +215,7 @@ private fun Attachment.toAttachmentPointerProto(): Either= FIRST_KEY_BASED_CDN) { + V4(string) + } else { + string.toLongOrNull()?.let { V2(it) } ?: V4(string) + } } } }