diff options
author | 2014-06-02 10:07:11 +0000 | |
---|---|---|
committer | 2014-06-02 10:07:12 +0000 | |
commit | 28538d916c39a7087024daadbd2c6d1c73227ff5 (patch) | |
tree | 71642193a66989b877932bdac5c527357462b19f /java/src | |
parent | a021395e84d4a934c042c56ef03f352cf43463f3 (diff) | |
parent | d660f3bec990851090e3adb98de236e02323011e (diff) | |
download | latinime-28538d916c39a7087024daadbd2c6d1c73227ff5.tar.gz latinime-28538d916c39a7087024daadbd2c6d1c73227ff5.tar.xz latinime-28538d916c39a7087024daadbd2c6d1c73227ff5.zip |
Merge "Fix an IOOB exception"
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/android/inputmethod/latin/WordComposer.java | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java index 864942d04..7a50d1a9d 100644 --- a/java/src/com/android/inputmethod/latin/WordComposer.java +++ b/java/src/com/android/inputmethod/latin/WordComposer.java @@ -145,9 +145,12 @@ public final class WordComposer { */ public int copyCodePointsExceptTrailingSingleQuotesAndReturnCodePointCount( final int[] destination) { + // This method can be called on a separate thread and mTypedWordCache can change while we + // are executing this method. + final String typedWord = mTypedWordCache.toString(); // lastIndex is exclusive - final int lastIndex = mTypedWordCache.length() - - StringUtils.getTrailingSingleQuotesCount(mTypedWordCache); + final int lastIndex = typedWord.length() + - StringUtils.getTrailingSingleQuotesCount(typedWord); if (lastIndex <= 0) { // The string is empty or contains only single quotes. return 0; @@ -155,11 +158,11 @@ public final class WordComposer { // The following function counts the number of code points in the text range which begins // at index 0 and extends to the character at lastIndex. - final int codePointSize = Character.codePointCount(mTypedWordCache, 0, lastIndex); + final int codePointSize = Character.codePointCount(typedWord, 0, lastIndex); if (codePointSize > destination.length) { return -1; } - return StringUtils.copyCodePointsAndReturnCodePointCount(destination, mTypedWordCache, 0, + return StringUtils.copyCodePointsAndReturnCodePointCount(destination, typedWord, 0, lastIndex, true /* downCase */); } |