From eac9f78dfab240f8a5cb9718327545db3f9aecfc Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 5 Aug 2022 17:28:16 -0400 Subject: [PATCH] Fix issues around all-zero UUIDs. --- .../securesms/logsubmit/LogSectionStories.kt | 1 + .../signalservice/api/push/DistributionId.java | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionStories.kt b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionStories.kt index 7ecb7207f1..70ef87c94d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionStories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionStories.kt @@ -24,6 +24,7 @@ class LogSectionStories : LogSection { output.append("Database ID : ${myStoryRecord.id}\n") output.append("Distribution ID: ${myStoryRecord.distributionId} (Matches expected value? ${myStoryRecord.distributionId == DistributionId.MY_STORY})\n") output.append("Recipient ID : ${presentRecipientId(myStoryRecipientId)}\n") + output.append("toString() Test: ${DistributionId.MY_STORY} | ${DistributionId.MY_STORY.asUuid()}") } else { output.append("< My story does not exist >\n") } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java index 7673323a04..d54b037dc4 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/DistributionId.java @@ -13,10 +13,18 @@ import java.util.UUID; */ public final class DistributionId { - public static final DistributionId MY_STORY = DistributionId.from("00000000-0000-0000-0000-000000000000"); + private static final String MY_STORY_STRING = "00000000-0000-0000-0000-000000000000"; + + public static final DistributionId MY_STORY = DistributionId.from(MY_STORY_STRING); private final UUID uuid; + /** + * Some devices appear to have a bad UUID.toString() that misrenders an all-zero UUID as "0000-0000". + * To account for this, we will keep our own string value, to prevent queries from going awry and such. + */ + private final String stringValue; + public static DistributionId from(String id) { return new DistributionId(UuidUtil.parseOrThrow(id)); } @@ -31,6 +39,12 @@ public final class DistributionId { private DistributionId(UUID uuid) { this.uuid = uuid; + + if (uuid.getLeastSignificantBits() == 0 && uuid.getMostSignificantBits() == 0) { + this.stringValue = MY_STORY_STRING; + } else { + this.stringValue = this.uuid.toString(); + } } public UUID asUuid() { @@ -39,7 +53,7 @@ public final class DistributionId { @Override public String toString() { - return uuid.toString(); + return stringValue; } @Override