Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 009dcac3 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Boundary check for children creating of PatriciaTriePolicy.

Bug: 10537529
Change-Id: I0cd8b6de230795498395ca08789ccc1c74780f2c
parent 4350a93a
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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);
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -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;