Boundary check for children creating of PatriciaTriePolicy.
Bug: 10537529 Change-Id: I0cd8b6de230795498395ca08789ccc1c74780f2cmain
parent
4350a93aa5
commit
009dcac33f
|
@ -31,9 +31,21 @@ void PatriciaTriePolicy::createAndGetAllChildNodes(const DicNode *const dicNode,
|
|||
return;
|
||||
}
|
||||
int nextPos = dicNode->getChildrenPos();
|
||||
if (nextPos < 0 || nextPos >= mDictBufferSize) {
|
||||
AKLOGE("Children PtNode array position is invalid. pos: %d, dict size: %d",
|
||||
nextPos, mDictBufferSize);
|
||||
ASSERT(false);
|
||||
return;
|
||||
}
|
||||
const int childCount = PatriciaTrieReadingUtils::getPtNodeArraySizeAndAdvancePosition(
|
||||
mDictRoot, &nextPos);
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
if (nextPos < 0 || nextPos >= mDictBufferSize) {
|
||||
AKLOGE("Child PtNode position is invalid. pos: %d, dict size: %d, childCount: %d / %d",
|
||||
nextPos, mDictBufferSize, i, childCount);
|
||||
ASSERT(false);
|
||||
return;
|
||||
}
|
||||
nextPos = createAndGetLeavingChildNode(dicNode, nextPos, childDicNodes);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ class PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
|
|||
PatriciaTriePolicy(const MmappedBuffer *const buffer)
|
||||
: mBuffer(buffer), mHeaderPolicy(mBuffer->getBuffer(), buffer->getBufferSize()),
|
||||
mDictRoot(mBuffer->getBuffer() + mHeaderPolicy.getSize()),
|
||||
mDictBufferSize(mBuffer->getBufferSize() - mHeaderPolicy.getSize()),
|
||||
mBigramListPolicy(mDictRoot), mShortcutListPolicy(mDictRoot) {}
|
||||
|
||||
~PatriciaTriePolicy() {
|
||||
|
@ -118,6 +119,7 @@ class PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
|
|||
const MmappedBuffer *const mBuffer;
|
||||
const HeaderPolicy mHeaderPolicy;
|
||||
const uint8_t *const mDictRoot;
|
||||
const int mDictBufferSize;
|
||||
const BigramListPolicy mBigramListPolicy;
|
||||
const ShortcutListPolicy mShortcutListPolicy;
|
||||
|
||||
|
|
Loading…
Reference in New Issue