Add empty PtNode checking for PatriciaTriePolicy.
Bug: 9503570 Change-Id: I784d29c307c1040699fa0aadfc6a47d97f03ffe4
This commit is contained in:
parent
009dcac33f
commit
9155eec0d9
4 changed files with 18 additions and 4 deletions
|
@ -325,7 +325,7 @@ int DynamicBigramListPolicy::followBigramLinkAndGetCurrentBigramPtNodePos(
|
||||||
nodeReader.fetchNodeInfoInBufferFromPtNodePos(currentPos);
|
nodeReader.fetchNodeInfoInBufferFromPtNodePos(currentPos);
|
||||||
bigramLinkCount++;
|
bigramLinkCount++;
|
||||||
if (bigramLinkCount > CONTINUING_BIGRAM_LINK_COUNT_LIMIT) {
|
if (bigramLinkCount > CONTINUING_BIGRAM_LINK_COUNT_LIMIT) {
|
||||||
AKLOGE("Bigram link is invalid. start position: %d", bigramPos);
|
AKLOGE("Bigram link is invalid. start position: %d", originalBigramPos);
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
return NOT_A_DICT_POS;
|
return NOT_A_DICT_POS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,7 +263,7 @@ class DynamicPatriciaTrieReadingHelper {
|
||||||
|
|
||||||
AK_FORCE_INLINE void pushReadingStateToStack() {
|
AK_FORCE_INLINE void pushReadingStateToStack() {
|
||||||
if (mReadingStateStack.size() > MAX_READING_STATE_STACK_SIZE) {
|
if (mReadingStateStack.size() > MAX_READING_STATE_STACK_SIZE) {
|
||||||
AKLOGI("Reading state stack overflow. Max size: %d", MAX_READING_STATE_STACK_SIZE);
|
AKLOGI("Reading state stack overflow. Max size: %zd", MAX_READING_STATE_STACK_SIZE);
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
mIsError = true;
|
mIsError = true;
|
||||||
mReadingState.mPos = NOT_A_DICT_POS;
|
mReadingState.mPos = NOT_A_DICT_POS;
|
||||||
|
|
|
@ -416,6 +416,11 @@ int PatriciaTriePolicy::createAndGetLeavingChildNode(const DicNode *const dicNod
|
||||||
if (PatriciaTrieReadingUtils::hasBigrams(flags)) {
|
if (PatriciaTrieReadingUtils::hasBigrams(flags)) {
|
||||||
getBigramsStructurePolicy()->skipAllBigrams(&pos);
|
getBigramsStructurePolicy()->skipAllBigrams(&pos);
|
||||||
}
|
}
|
||||||
|
if (mergedNodeCodePointCount <= 0) {
|
||||||
|
AKLOGE("Empty PtNode is not allowed. Code point count: %d", mergedNodeCodePointCount);
|
||||||
|
ASSERT(false);
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
childDicNodes->pushLeavingChild(dicNode, ptNodePos, childrenPos, probability,
|
childDicNodes->pushLeavingChild(dicNode, ptNodePos, childrenPos, probability,
|
||||||
PatriciaTrieReadingUtils::isTerminal(flags),
|
PatriciaTrieReadingUtils::isTerminal(flags),
|
||||||
PatriciaTrieReadingUtils::hasChildrenInFlags(flags),
|
PatriciaTrieReadingUtils::hasChildrenInFlags(flags),
|
||||||
|
|
|
@ -71,8 +71,17 @@ const PtReadingUtils::NodeFlags PtReadingUtils::FLAG_IS_BLACKLISTED = 0x01;
|
||||||
length = ByteArrayUtils::readStringAndAdvancePosition(buffer, maxLength, outBuffer,
|
length = ByteArrayUtils::readStringAndAdvancePosition(buffer, maxLength, outBuffer,
|
||||||
pos);
|
pos);
|
||||||
} else {
|
} else {
|
||||||
if (maxLength > 0) {
|
const int codePoint = getCodePointAndAdvancePosition(buffer, pos);
|
||||||
outBuffer[0] = getCodePointAndAdvancePosition(buffer, pos);
|
if (codePoint == NOT_A_CODE_POINT) {
|
||||||
|
// CAVEAT: codePoint == NOT_A_CODE_POINT means the code point is
|
||||||
|
// CHARACTER_ARRAY_TERMINATOR. The code point must not be CHARACTER_ARRAY_TERMINATOR
|
||||||
|
// when the PtNode has a single code point.
|
||||||
|
length = 0;
|
||||||
|
AKLOGE("codePoint is NOT_A_CODE_POINT. pos: %d, codePoint: 0x%x, buffer[pos - 1]: 0x%x",
|
||||||
|
*pos - 1, codePoint, buffer[*pos - 1]);
|
||||||
|
ASSERT(false);
|
||||||
|
} else if (maxLength > 0) {
|
||||||
|
outBuffer[0] = codePoint;
|
||||||
length = 1;
|
length = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue