diff options
author | 2013-09-16 07:21:45 -0700 | |
---|---|---|
committer | 2013-09-16 07:21:45 -0700 | |
commit | dfc51ec98b7313118a1ec3b4dd2a7c689bcd0485 (patch) | |
tree | 1be26d06115660e029b730d0f8263db5e52926fc /native/jni/src | |
parent | 4e3d77821168c55450e7dea52aeceda3123a585c (diff) | |
parent | 7d2a0db7d76e8865d9f5f5110caab47f3287e81b (diff) | |
download | latinime-dfc51ec98b7313118a1ec3b4dd2a7c689bcd0485.tar.gz latinime-dfc51ec98b7313118a1ec3b4dd2a7c689bcd0485.tar.xz latinime-dfc51ec98b7313118a1ec3b4dd2a7c689bcd0485.zip |
am 7d2a0db7: Merge "Add boundary check for PtNode reading position."
* commit '7d2a0db7d76e8865d9f5f5110caab47f3287e81b':
Add boundary check for PtNode reading position.
Diffstat (limited to 'native/jni/src')
-rw-r--r-- | native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp | 22 | ||||
-rw-r--r-- | native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp index 56ef60ae4..6666e1fe3 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp @@ -25,6 +25,13 @@ namespace latinime { void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(const int nodePos, const int maxCodePointCount, int *const outCodePoints) { + if (nodePos < 0 || nodePos >= mBuffer->getTailPosition()) { + AKLOGE("Fetching PtNode info form invalid dictionary position: %d, dictionary size: %d", + nodePos, mBuffer->getTailPosition()); + ASSERT(false); + invalidatePtNodeInfo(); + return; + } const bool usesAdditionalBuffer = mBuffer->isInAdditionalBuffer(nodePos); const uint8_t *const dictBuf = mBuffer->getBuffer(usesAdditionalBuffer); int pos = nodePos; @@ -94,4 +101,19 @@ void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(c } } +void DynamicPatriciaTrieNodeReader::invalidatePtNodeInfo() { + mHeadPos = NOT_A_VALID_WORD_POS; + mFlags = 0; + mParentPos = NOT_A_DICT_POS; + mCodePointCount = 0; + mProbabilityFieldPos = NOT_A_DICT_POS; + mProbability = NOT_A_PROBABILITY; + mChildrenPosFieldPos = NOT_A_DICT_POS; + mChildrenPos = NOT_A_DICT_POS; + mBigramLinkedNodePos = NOT_A_DICT_POS; + mShortcutPos = NOT_A_DICT_POS; + mBigramPos = NOT_A_DICT_POS; + mSiblingPos = NOT_A_VALID_WORD_POS; +} + } diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h index 89d38a590..6fd52b97f 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h @@ -156,6 +156,8 @@ class DynamicPatriciaTrieNodeReader { void fetchNodeInfoFromBufferAndProcessMovedNode(const int nodePos, const int maxCodePointCount, int *const outCodePoints); + + void invalidatePtNodeInfo(); }; } // namespace latinime #endif /* LATINIME_DYNAMIC_PATRICIA_TRIE_NODE_READER_H */ |