From 66f338983bb9cb04a0d94a4729330b1c8ff01c93 Mon Sep 17 00:00:00 2001 From: Yuichiro Hanada Date: Thu, 16 Aug 2012 19:23:56 +0900 Subject: fix findWordInTree. Change-Id: I9d81c815494a0670afa81219ad7bad82274d997e --- .../android/inputmethod/latin/makedict/FusionDictionary.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'java/src') diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java index 5864db28e..260155174 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java +++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java @@ -516,13 +516,22 @@ public class FusionDictionary implements Iterable { int indexOfGroup = findIndexOfChar(node, s.codePointAt(index)); if (CHARACTER_NOT_FOUND == indexOfGroup) return null; currentGroup = node.mData.get(indexOfGroup); + + if (s.length() - index < currentGroup.mChars.length) return null; + int newIndex = index; + while (newIndex < s.length() && newIndex - index < currentGroup.mChars.length) { + if (currentGroup.mChars[newIndex - index] != s.codePointAt(newIndex)) return null; + newIndex++; + } + index = newIndex; + if (DBG) checker.append(new String(currentGroup.mChars, 0, currentGroup.mChars.length)); - index += currentGroup.mChars.length; if (index < s.length()) { node = currentGroup.mChildren; } } while (null != node && index < s.length()); + if (index < s.length()) return null; if (DBG && !s.equals(checker.toString())) return null; return currentGroup; } -- cgit v1.2.3-83-g751a