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

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

Fix: PtNode array size writirng when array size > 127. DO NOT MERGE.

This is a manual cherrypick of Ib729ceedbc8ef837e50490439817b36039ae2b4e.

Bug: 11772864
Change-Id: I5ecbe729dbdd24e194e48b4d68b17af8549c4726
parent b4cc0ae0
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -460,8 +460,10 @@ public final class BinaryDictIOUtils {
                destination.write((byte)infos.length);
                break;
            case 2:
                destination.write((byte)(infos.length >> 8));
                destination.write((byte)(infos.length & 0xFF));
                final int encodedPtNodeCount =
                        infos.length | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG;
                destination.write((byte)(encodedPtNodeCount >> 8));
                destination.write((byte)(encodedPtNodeCount & 0xFF));
                break;
            default:
                throw new RuntimeException("Invalid node count size.");
+2 −0
Original line number Diff line number Diff line
@@ -304,6 +304,8 @@ public final class FormatSpec {
    static final int INVALID_CHARACTER = -1;

    static final int MAX_PTNODES_FOR_ONE_BYTE_PTNODE_COUNT = 0x7F; // 127
    // Large PtNode array size field size is 2 bytes.
    static final int LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG = 0x8000;
    static final int MAX_PTNODES_IN_A_PT_NODE_ARRAY = 0x7FFF; // 32767
    static final int MAX_BIGRAMS_IN_A_PTNODE = 10000;
    static final int MAX_SHORTCUT_LIST_SIZE_IN_A_PTNODE = 0xFFFF;
+3 −1
Original line number Diff line number Diff line
@@ -129,7 +129,9 @@ public class Ver3DictEncoder implements DictEncoder {
        if (countSize != 1 && countSize != 2) {
            throw new RuntimeException("Strange size from getGroupCountSize : " + countSize);
        }
        mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, ptNodeCount,
        final int encodedPtNodeCount = (countSize == 2) ?
                (ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
        mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, encodedPtNodeCount,
                countSize);
    }

+3 −1
Original line number Diff line number Diff line
@@ -354,7 +354,9 @@ public class Ver4DictEncoder implements DictEncoder {
        if (countSize != 1 && countSize != 2) {
            throw new RuntimeException("Strange size from getPtNodeCountSize : " + countSize);
        }
        mTriePos = BinaryDictEncoderUtils.writeUIntToBuffer(mTrieBuf, mTriePos, ptNodeCount,
        final int encodedPtNodeCount = (countSize == 2) ?
                (ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
        mTriePos = BinaryDictEncoderUtils.writeUIntToBuffer(mTrieBuf, mTriePos, encodedPtNodeCount,
                countSize);
    }