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

Commit 7d2a0db7 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Add boundary check for PtNode reading position."

parents f3f00006 f8747284
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -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;
}

}
+2 −0
Original line number Diff line number Diff line
@@ -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 */