From 8be16f78b10aa4a8975c4068db1b32f81f661a2c Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Thu, 26 Jan 2012 13:15:25 +0900
Subject: [PATCH] Add a guard against OOB.

...and avoid crashing in one case where the application may
change the text while we are typing.

Bug: 5685922
Change-Id: I4a22c63168986f43ac84f512aaa4267023d536e3
---
 java/src/com/android/inputmethod/latin/LatinIME.java | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index d59497d6a0..f57753fc2d 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -2229,10 +2229,14 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
         final CharSequence textBeforeCursor = ic.getTextBeforeCursor(2, 0);
         // NOTE: This does not work with surrogate pairs. Hopefully when the keyboard is able to
         // enter surrogate pairs this code will have been removed.
-        if (Keyboard.CODE_SPACE != textBeforeCursor.charAt(1)) {
-            // We should not have come here if the text before the cursor is not a space.
-            throw new RuntimeException("Tried to revert a swap of punctuation but we didn't "
+        if (TextUtils.isEmpty(textBeforeCursor)
+                || (Keyboard.CODE_SPACE != textBeforeCursor.charAt(1))) {
+            // We may only come here if the application is changing the text while we are typing.
+            // This is quite a broken case, but not logically impossible, so we shouldn't crash,
+            // but some debugging log may be in order.
+            Log.d(TAG, "Tried to revert a swap of punctuation but we didn't "
                     + "find a space just before the cursor.");
+            return false;
         }
         ic.beginBatchEdit();
         ic.deleteSurroundingText(2, 0);
-- 
GitLab