aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
diff options
context:
space:
mode:
authorYuichiro Hanada <yhanada@google.com>2013-09-18 15:21:30 +0900
committerYuichiro Hanada <yhanada@google.com>2013-09-18 15:50:10 +0900
commitd0c87576ffad858b13063506b15ca96293319bdb (patch)
tree9df21ca8b9dd214dbed2df2df694f4dfa6fddfdb /java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
parent72e53a1e384e1c0deff7f7e74db18f39f0841548 (diff)
downloadlatinime-d0c87576ffad858b13063506b15ca96293319bdb.tar.gz
latinime-d0c87576ffad858b13063506b15ca96293319bdb.tar.xz
latinime-d0c87576ffad858b13063506b15ca96293319bdb.zip
Fix getChildrenPosition.
Change-Id: Ic39592dbf0d4e6d2e4879cdb1a95b65d46a57e92
Diffstat (limited to 'java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java')
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java11
1 files changed, 9 insertions, 2 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
index f333b0d86..70931f885 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java
@@ -758,8 +758,15 @@ public class BinaryDictEncoderUtils {
final FormatOptions formatOptions) {
int positionOfChildrenPosField = ptNode.mCachedAddressAfterUpdate
+ getNodeHeaderSize(ptNode, formatOptions);
- if (ptNode.mFrequency >= 0) {
- positionOfChildrenPosField += FormatSpec.PTNODE_FREQUENCY_SIZE;
+ if (ptNode.isTerminal()) {
+ // A terminal node has either the terminal id or the frequency.
+ // If positionOfChildrenPosField is incorrect, we may crash when jumping to the children
+ // position.
+ if (formatOptions.mHasTerminalId) {
+ positionOfChildrenPosField += FormatSpec.PTNODE_TERMINAL_ID_SIZE;
+ } else {
+ positionOfChildrenPosField += FormatSpec.PTNODE_FREQUENCY_SIZE;
+ }
}
return null == ptNode.mChildren ? FormatSpec.NO_CHILDREN_ADDRESS
: ptNode.mChildren.mCachedAddressAfterUpdate - positionOfChildrenPosField;