From db842bd7e4c52a00cdcdffe5f2c8b0486153695b Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Fri, 28 Jul 2017 10:17:38 -0300 Subject: [PATCH] Prevent a crash caused by empty emoji The crash happens because the serialization of recently used emoji uses ';' to separate the emojis. One of the ASCII emojis however has a ';' in the beginning. When this one is used by the user, it causes an empty string to be returned when deserializing. This commit prevents the crash by changing the separator to a tab. It uses a different settings string to store the emoji, so users will lose the list of recently used emoji when they update to this version. PS. That wasn't my idea ;) --- .../securesms/components/emoji/EmojiPageView.java | 3 ++- .../securesms/components/emoji/RecentEmojiPageModel.java | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java index 9344319cd2..c006793018 100644 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java +++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java @@ -104,8 +104,9 @@ public class EmojiPageView extends FrameLayout { emojiSize + 2 * pad)); view = emojiView; } + String emoji = model.getEmoji()[position]; + view.setEmoji(emoji); - view.setEmoji(model.getEmoji()[position]); return view; } } diff --git a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java index 21eab06aea..9b5780b252 100644 --- a/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java +++ b/briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java @@ -32,7 +32,7 @@ public class RecentEmojiPageModel implements EmojiPageModel { private static final Logger LOG = Logger.getLogger(RecentEmojiPageModel.class.getName()); - private static final String EMOJI_LRU_PREFERENCE = "pref_emoji_recent"; + private static final String EMOJI_LRU_PREFERENCE = "pref_emoji_recent2"; private static final int EMOJI_LRU_SIZE = 50; private final LinkedHashSet<String> recentlyUsed; // UI thread @@ -98,12 +98,12 @@ public class RecentEmojiPageModel implements EmojiPageModel { } private String serialize(LinkedHashSet<String> emojis) { - return StringUtils.join(emojis, ";"); + return StringUtils.join(emojis, "\t"); } private LinkedHashSet<String> deserialize(@Nullable String serialized) { if (serialized == null) return new LinkedHashSet<>(); - String[] list = serialized.split(";"); + String[] list = serialized.split("\t"); LinkedHashSet<String> result = new LinkedHashSet<>(list.length); Collections.addAll(result, list); return result; -- GitLab