diff options
author | 2013-09-18 01:38:37 -0700 | |
---|---|---|
committer | 2013-09-18 01:38:37 -0700 | |
commit | 3255b9dad573bd942340e2795c75be39d0c56d1a (patch) | |
tree | 1677139ca8f7e15013f26115151fb7d2dbc7602d /java/src | |
parent | 6e0bdd58beaedcdcae206d8bbd51aefefb0dfc70 (diff) | |
parent | 256937b475a8183ac8bfa7964188071497d4fe7d (diff) | |
download | latinime-3255b9dad573bd942340e2795c75be39d0c56d1a.tar.gz latinime-3255b9dad573bd942340e2795c75be39d0c56d1a.tar.xz latinime-3255b9dad573bd942340e2795c75be39d0c56d1a.zip |
am 256937b4: Merge "Fix getChildrenPosition."
* commit '256937b475a8183ac8bfa7964188071497d4fe7d':
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; |