Loading java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java +48 −32 Original line number Diff line number Diff line Loading @@ -157,10 +157,13 @@ public class BinaryDictIOUtils { final int wordLen = word.codePointCount(0, word.length()); for (int depth = 0; depth < Constants.Dictionary.MAX_WORD_LENGTH; ++depth) { if (wordPos >= wordLen) return FormatSpec.NOT_VALID_WORD; do { int groupOffset = buffer.position() - header.mHeaderSize; final int charGroupCount = BinaryDictInputOutput.readCharGroupCount(buffer); groupOffset += BinaryDictInputOutput.getGroupCountSize(charGroupCount); boolean foundNextCharGroup = false; for (int i = 0; i < charGroupCount; ++i) { final int charGroupPos = buffer.position(); final CharGroupInfo currentInfo = BinaryDictInputOutput.readCharGroup(buffer, Loading @@ -177,6 +180,7 @@ public class BinaryDictIOUtils { } if (same) { // found the group matches the word. if (wordPos + currentInfo.mCharacters.length == wordLen) { if (currentInfo.mFrequency == CharGroup.NOT_A_TERMINAL) { return FormatSpec.NOT_VALID_WORD; Loading @@ -188,16 +192,28 @@ public class BinaryDictIOUtils { if (currentInfo.mChildrenAddress == FormatSpec.NO_CHILDREN_ADDRESS) { return FormatSpec.NOT_VALID_WORD; } foundNextCharGroup = true; buffer.position(currentInfo.mChildrenAddress); break; } groupOffset = currentInfo.mEndAddress; } // not found if (i >= charGroupCount - 1) { // If we found the next char group, it is under the file pointer. // But if not, we are at the end of this node so we expect to have // a forward link address that we need to consult and possibly resume // search on the next node in the linked list. if (foundNextCharGroup) break; if (!header.mFormatOptions.mSupportsDynamicUpdate) { return FormatSpec.NOT_VALID_WORD; } final int forwardLinkAddress = buffer.readUnsignedInt24(); if (forwardLinkAddress == FormatSpec.NO_FORWARD_LINK_ADDRESS) { return FormatSpec.NOT_VALID_WORD; } buffer.position(forwardLinkAddress); } while(true); } return FormatSpec.NOT_VALID_WORD; } Loading Loading
java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java +48 −32 Original line number Diff line number Diff line Loading @@ -157,10 +157,13 @@ public class BinaryDictIOUtils { final int wordLen = word.codePointCount(0, word.length()); for (int depth = 0; depth < Constants.Dictionary.MAX_WORD_LENGTH; ++depth) { if (wordPos >= wordLen) return FormatSpec.NOT_VALID_WORD; do { int groupOffset = buffer.position() - header.mHeaderSize; final int charGroupCount = BinaryDictInputOutput.readCharGroupCount(buffer); groupOffset += BinaryDictInputOutput.getGroupCountSize(charGroupCount); boolean foundNextCharGroup = false; for (int i = 0; i < charGroupCount; ++i) { final int charGroupPos = buffer.position(); final CharGroupInfo currentInfo = BinaryDictInputOutput.readCharGroup(buffer, Loading @@ -177,6 +180,7 @@ public class BinaryDictIOUtils { } if (same) { // found the group matches the word. if (wordPos + currentInfo.mCharacters.length == wordLen) { if (currentInfo.mFrequency == CharGroup.NOT_A_TERMINAL) { return FormatSpec.NOT_VALID_WORD; Loading @@ -188,16 +192,28 @@ public class BinaryDictIOUtils { if (currentInfo.mChildrenAddress == FormatSpec.NO_CHILDREN_ADDRESS) { return FormatSpec.NOT_VALID_WORD; } foundNextCharGroup = true; buffer.position(currentInfo.mChildrenAddress); break; } groupOffset = currentInfo.mEndAddress; } // not found if (i >= charGroupCount - 1) { // If we found the next char group, it is under the file pointer. // But if not, we are at the end of this node so we expect to have // a forward link address that we need to consult and possibly resume // search on the next node in the linked list. if (foundNextCharGroup) break; if (!header.mFormatOptions.mSupportsDynamicUpdate) { return FormatSpec.NOT_VALID_WORD; } final int forwardLinkAddress = buffer.readUnsignedInt24(); if (forwardLinkAddress == FormatSpec.NO_FORWARD_LINK_ADDRESS) { return FormatSpec.NOT_VALID_WORD; } buffer.position(forwardLinkAddress); } while(true); } return FormatSpec.NOT_VALID_WORD; } Loading