diff options
author | 2014-02-21 01:38:36 -0800 | |
---|---|---|
committer | 2014-02-21 01:38:36 -0800 | |
commit | acf61fbdf5eb01f99ed651df74f28e433de58ffb (patch) | |
tree | a8279317354a1d4fdd5b4ce7d69a502f2de3ea7d | |
parent | 5041d9267e263dfd9373554c5ef41b6218e69ebc (diff) | |
parent | 9cfa8417dacb1d3efc687c8b9c5a7f141f5f7746 (diff) | |
download | latinime-acf61fbdf5eb01f99ed651df74f28e433de58ffb.tar.gz latinime-acf61fbdf5eb01f99ed651df74f28e433de58ffb.tar.xz latinime-acf61fbdf5eb01f99ed651df74f28e433de58ffb.zip |
am 9cfa8417: Merge "Add boundary check for ver2 dict reading."
* commit '9cfa8417dacb1d3efc687c8b9c5a7f141f5f7746':
Add boundary check for ver2 dict reading.
-rw-r--r-- | native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp index 212f2ef39..84a6ccf33 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp @@ -87,9 +87,24 @@ int PatriciaTriePolicy::getCodePointsAndProbabilityAndReturnCodePointCount( int lastCandidatePtNodePos = 0; // Let's loop through PtNodes in this PtNode array searching for either the terminal // or one of its ascendants. + if (pos < 0 || pos >= mDictBufferSize) { + AKLOGE("PtNode array position is invalid. pos: %d, dict size: %d", + pos, mDictBufferSize); + mIsCorrupted = true; + ASSERT(false); + *outUnigramProbability = NOT_A_PROBABILITY; + return 0; + } for (int ptNodeCount = PatriciaTrieReadingUtils::getPtNodeArraySizeAndAdvancePosition( mDictRoot, &pos); ptNodeCount > 0; --ptNodeCount) { const int startPos = pos; + if (pos < 0 || pos >= mDictBufferSize) { + AKLOGE("PtNode position is invalid. pos: %d, dict size: %d", pos, mDictBufferSize); + mIsCorrupted = true; + ASSERT(false); + *outUnigramProbability = NOT_A_PROBABILITY; + return 0; + } const PatriciaTrieReadingUtils::NodeFlags flags = PatriciaTrieReadingUtils::getFlagsAndAdvancePosition(mDictRoot, &pos); const int character = PatriciaTrieReadingUtils::getCodePointAndAdvancePosition( |