diff options
author | 2013-09-18 08:36:48 +0000 | |
---|---|---|
committer | 2013-09-18 08:36:48 +0000 | |
commit | 256937b475a8183ac8bfa7964188071497d4fe7d (patch) | |
tree | 898d3fd535452f96c6f20a816c7f301ea366aa59 /java/src | |
parent | 59418672a140db38b9f17fee6d7df399897fbb39 (diff) | |
parent | d0c87576ffad858b13063506b15ca96293319bdb (diff) | |
download | latinime-256937b475a8183ac8bfa7964188071497d4fe7d.tar.gz latinime-256937b475a8183ac8bfa7964188071497d4fe7d.tar.xz latinime-256937b475a8183ac8bfa7964188071497d4fe7d.zip |
Merge "Fix getChildrenPosition."
Diffstat (limited to 'java/src')
-rw-r--r-- | java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java | 11 |
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; |