From db19077834ae6febf12e95f5129c85a564a2890e Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 4 Dec 2019 10:21:33 -0500 Subject: [PATCH] Fix crash when receiving a PreKey message in a new session. We don't allow creating recipients with only a UUID at the moment (for good reason), but the way the decrypt method was written, it was possible to do so. Until we have CDS, we should prefer the phone number in scenarios like these. --- .../api/crypto/SignalServiceCipher.java | 13 ++++++++++++- .../api/push/SignalServiceAddress.java | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java index f04f5cc5e8..1c8aafb2ca 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java @@ -293,7 +293,18 @@ public class SignalServiceCipher { } else if (e164Address != null && store.containsSession(e164Address)) { return e164Address; } else { - return new SignalProtocolAddress(address.getIdentifier(), sourceDevice); + // TODO [greyson][uuid] We should switch to preferring the UUID once we allow UUID-only recipients + String preferred; + + if (address.getNumber().isPresent()) { + preferred = address.getNumber().get(); + } else if (address.getUuid().isPresent()) { + preferred = address.getUuid().get().toString(); + } else { + throw new AssertionError("Given the constrains of creating a SignalServiceAddress, this should not be possible."); + } + + return new SignalProtocolAddress(preferred, sourceDevice); } } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java index 085464d948..8231723101 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/push/SignalServiceAddress.java @@ -65,7 +65,7 @@ public class SignalServiceAddress { } else if (e164.isPresent()) { return e164.get(); } else { - return null; + throw new AssertionError("Given the checks in the constructor, this should not be possible."); } }