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

Commit b2408c7f authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Fix parent position reading for ver3 dict.

Bug: 6669677
Change-Id: Ia55d4ecb43c7d37b9bc466b848d5142bc13cd823
parent 60eb2501
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -27,7 +27,9 @@ void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(c
    const uint8_t *const dictRoot = mBinaryDictionaryInfo->getDictRoot();
    const uint8_t *const dictRoot = mBinaryDictionaryInfo->getDictRoot();
    int pos = nodePos;
    int pos = nodePos;
    mFlags = PatriciaTrieReadingUtils::getFlagsAndAdvancePosition(dictRoot, &pos);
    mFlags = PatriciaTrieReadingUtils::getFlagsAndAdvancePosition(dictRoot, &pos);
    mParentPos = DynamicPatriciaTrieReadingUtils::getParentPosAndAdvancePosition(dictRoot, &pos);
    const int parentPos =
            DynamicPatriciaTrieReadingUtils::getParentPosAndAdvancePosition(dictRoot, &pos);
    mParentPos = (parentPos != 0) ? mNodePos + parentPos : NOT_A_DICT_POS;
    if (outCodePoints != 0) {
    if (outCodePoints != 0) {
        mCodePointCount = PatriciaTrieReadingUtils::getCharsAndAdvancePosition(
        mCodePointCount = PatriciaTrieReadingUtils::getCharsAndAdvancePosition(
                dictRoot, mFlags, maxCodePointCount, outCodePoints, &pos);
                dictRoot, mFlags, maxCodePointCount, outCodePoints, &pos);
+1 −1
Original line number Original line Diff line number Diff line
@@ -94,7 +94,7 @@ int DynamicPatriciaTriePolicy::getCodePointsAndProbabilityAndReturnCodePointCoun
        reverseCodePoints[codePointCount++] = mergedNodeCodePoints[i];
        reverseCodePoints[codePointCount++] = mergedNodeCodePoints[i];
    }
    }
    // Then, follow parent pos toward the root node.
    // Then, follow parent pos toward the root node.
    while (nodeReader.getParentPos() != getRootPosition()) {
    while (nodeReader.getParentPos() != NOT_A_DICT_POS) {
        // codePointCount must be incremented at least once in each iteration to ensure preventing
        // codePointCount must be incremented at least once in each iteration to ensure preventing
        // infinite loop.
        // infinite loop.
        if (nodeReader.isDeleted() || codePointCount > maxCodePointCount
        if (nodeReader.isDeleted() || codePointCount > maxCodePointCount
+1 −2
Original line number Original line Diff line number Diff line
@@ -39,8 +39,7 @@ class DynamicPatriciaTrieReadingUtils {


    static AK_FORCE_INLINE int getParentPosAndAdvancePosition(const uint8_t *const buffer,
    static AK_FORCE_INLINE int getParentPosAndAdvancePosition(const uint8_t *const buffer,
            int *const pos) {
            int *const pos) {
        const int base = *pos;
        return ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
        return base + ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
    }
    }


    static int readChildrenPositionAndAdvancePosition(const uint8_t *const buffer,
    static int readChildrenPositionAndAdvancePosition(const uint8_t *const buffer,