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