From 4c976aceeef7238cabbbb29f5793b4e805d087e5 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Fri, 3 Aug 2012 22:47:17 +0900
Subject: [PATCH] Fix an OOB exception

Not sure exactly how this can happen, but at least this should
prevent us from crashing.

Bug: 6920884
Change-Id: I451864756b48c5cb5e98b06edee917d88766d77f
---
 .../android/inputmethod/latin/ExpandableDictionary.java    | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
index 5d7995dc28..d101aaf15e 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java
@@ -654,9 +654,12 @@ public class ExpandableDictionary extends Dictionary {
                 --index;
                 mLookedUpString[index] = node.mCode;
                 node = node.mParent;
-            } while (node != null);
+            } while (node != null && index > 0);
 
-            if (freq >= 0) {
+            // If node is null, we have a word longer than MAX_WORD_LENGTH in the dictionary.
+            // It's a little unclear how this can happen, but just in case it does it's safer
+            // to ignore the word in this case.
+            if (freq >= 0 && node == null) {
                 suggestions.add(new SuggestedWordInfo(new String(mLookedUpString, index,
                         BinaryDictionary.MAX_WORD_LENGTH - index),
                         freq, SuggestedWordInfo.KIND_CORRECTION, mDictType));
-- 
GitLab