diff options
author | 2014-02-21 09:03:12 +0000 | |
---|---|---|
committer | 2014-02-21 09:03:12 +0000 | |
commit | 9cfa8417dacb1d3efc687c8b9c5a7f141f5f7746 (patch) | |
tree | ab1878bd8fed9c3a2e2cfcc1bde5f05d1de562a5 | |
parent | 239256b1564cce1aba3d79d7bf931b290243432a (diff) | |
parent | be81b75decd188bd12ef3945c4aacb5dd9fff72f (diff) | |
download | latinime-9cfa8417dacb1d3efc687c8b9c5a7f141f5f7746.tar.gz latinime-9cfa8417dacb1d3efc687c8b9c5a7f141f5f7746.tar.xz latinime-9cfa8417dacb1d3efc687c8b9c5a7f141f5f7746.zip |
Merge "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( |