From 6c721b5f68ee20e6d78ddd4f383fb8651827b726 Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Tue, 18 Sep 2012 18:01:15 +0900 Subject: [PATCH] Fix a bug with surrogate characters This is a pretty bad bug :/ Bug: 7013840 Change-Id: I12c7cfa4fa9d56b2c1fee6e6222c64fe20b88fa3 --- .../inputmethod/latin/makedict/FusionDictionary.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java index 6775de8a8..98cf308c8 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java +++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java @@ -556,6 +556,7 @@ public class FusionDictionary implements Iterable { final StringBuilder checker = DBG ? new StringBuilder() : null; CharGroup currentGroup; + final int codePointCountInS = s.codePointCount(0, s.length()); do { int indexOfGroup = findIndexOfChar(node, s.codePointAt(index)); if (CHARACTER_NOT_FOUND == indexOfGroup) return null; @@ -570,12 +571,12 @@ public class FusionDictionary implements Iterable { index = newIndex; if (DBG) checker.append(new String(currentGroup.mChars, 0, currentGroup.mChars.length)); - if (index < s.length()) { + if (index < codePointCountInS) { node = currentGroup.mChildren; } - } while (null != node && index < s.length()); + } while (null != node && index < codePointCountInS); - if (index < s.length()) return null; + if (index < codePointCountInS) return null; if (!currentGroup.isTerminal()) return null; if (DBG && !s.equals(checker.toString())) return null; return currentGroup;