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

Commit 69ebca06 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Fix children position reading for dynamic patricia trie.

Bug: 6669677
Change-Id: I68ad68361676f952bd25903c253c22617d3ce361
parent fcc6ab08
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -45,15 +45,11 @@ void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(c
    } else {
        mProbability = NOT_A_PROBABILITY;
    }
    if (hasChildren()) {
    mChildrenPos = DynamicPatriciaTrieReadingUtils::readChildrenPositionAndAdvancePosition(
            dictBuf, mFlags, &pos);
    if (usesAdditionalBuffer && mChildrenPos != NOT_A_DICT_POS) {
        mChildrenPos += mOriginalDictSize;
    }
    } else {
        mChildrenPos = NOT_A_DICT_POS;
    }
    if (usesAdditionalBuffer) {
        pos += mOriginalDictSize;
    }
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ class DynamicPatriciaTrieNodeReader {
    }

    AK_FORCE_INLINE bool hasChildren() const {
        return PatriciaTrieReadingUtils::hasChildrenInFlags(mFlags);
        return mChildrenPos != NOT_A_DICT_POS;
    }

    AK_FORCE_INLINE bool isTerminal() const {
+7 −1
Original line number Diff line number Diff line
@@ -32,7 +32,13 @@ const DptReadingUtils::NodeFlags DptReadingUtils::FLAG_IS_DELETED = 0x80;
        const uint8_t *const buffer, const NodeFlags flags, int *const pos) {
    if ((flags & MASK_MOVED) == FLAG_IS_NOT_MOVED) {
        const int base = *pos;
        return base + ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
        const int offset = ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
        if (offset == 0) {
            // 0 offset means that the node does not have children.
            return NOT_A_DICT_POS;
        } else {
            return base + offset;
        }
    } else {
        return NOT_A_DICT_POS;
    }