From 88d1e7b40dcf8fb95bb8a0bfe16f04253680b8ed Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 1 Oct 2024 09:35:49 -0300 Subject: [PATCH] Add additional checks to chat-color processing. --- .../securesms/conversation/colors/ChatColors.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ChatColors.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ChatColors.kt index aa564b8df0..cf674dc17d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ChatColors.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ChatColors.kt @@ -148,9 +148,17 @@ class ChatColors( } companion object { + /** + * Converts a network chat color into our domain model object. + * + * Has additional protection to ensure that a rogue client can't send us a malformed + * color. + */ @JvmStatic fun forChatColor(id: Id, chatColor: ChatColor): ChatColors { - assert((chatColor.singleColor != null) xor (chatColor.linearGradient != null)) + if (chatColor.singleColor == null && chatColor.linearGradient == null) { + return ChatColorsPalette.Bubbles.ULTRAMARINE + } return if (chatColor.linearGradient != null) { val linearGradient = LinearGradient( @@ -160,10 +168,12 @@ class ChatColors( ) forGradient(id, linearGradient) - } else { - val singleColor = chatColor.singleColor!!.color + } else if (chatColor.singleColor != null) { + val singleColor = chatColor.singleColor.color forColor(id, singleColor) + } else { + ChatColorsPalette.Bubbles.ULTRAMARINE } }