diff options
author | 2013-09-18 15:21:30 +0900 | |
---|---|---|
committer | 2013-09-18 15:50:10 +0900 | |
commit | d0c87576ffad858b13063506b15ca96293319bdb (patch) | |
tree | 9df21ca8b9dd214dbed2df2df694f4dfa6fddfdb /java/src/com/android/inputmethod/latin/makedict/BinaryDictEncoderUtils.java | |
parent | 72e53a1e384e1c0deff7f7e74db18f39f0841548 (diff) | |
download | latinime-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.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; |