Add boundary check for v4 bigram reading.
Bug: 14496386 Change-Id: Iedd3445c3222a777a2476beed7d9eb53773f406cmain
parent
d3642a2a58
commit
f9ce867d80
|
@ -23,9 +23,11 @@ namespace latinime {
|
|||
const BigramEntry BigramDictContent::getBigramEntryAndAdvancePosition(
|
||||
int *const bigramEntryPos) const {
|
||||
const BufferWithExtendableBuffer *const bigramListBuffer = getContentBuffer();
|
||||
if (*bigramEntryPos < 0 || *bigramEntryPos >= bigramListBuffer->getTailPosition()) {
|
||||
AKLOGE("Invalid bigram entry position. bigramEntryPos: %d, bufSize: %d",
|
||||
*bigramEntryPos, bigramListBuffer->getTailPosition());
|
||||
const int bigramEntryTailPos = (*bigramEntryPos) + getBigramEntrySize();
|
||||
if (*bigramEntryPos < 0 || bigramEntryTailPos > bigramListBuffer->getTailPosition()) {
|
||||
AKLOGE("Invalid bigram entry position. bigramEntryPos: %d, bigramEntryTailPos: %d, "
|
||||
"bufSize: %d", *bigramEntryPos, bigramEntryTailPos,
|
||||
bigramListBuffer->getTailPosition());
|
||||
ASSERT(false);
|
||||
return BigramEntry(false /* hasNext */, NOT_A_PROBABILITY,
|
||||
Ver4DictConstants::NOT_A_TERMINAL_ID);
|
||||
|
|
|
@ -99,6 +99,20 @@ class BigramDictContent : public SparseTableDictContent {
|
|||
return hasNext ? Ver4DictConstants::BIGRAM_HAS_NEXT_MASK : 0;
|
||||
}
|
||||
|
||||
int getBigramEntrySize() const {
|
||||
if (mHasHistoricalInfo) {
|
||||
return Ver4DictConstants::BIGRAM_FLAGS_FIELD_SIZE
|
||||
+ Ver4DictConstants::TIME_STAMP_FIELD_SIZE
|
||||
+ Ver4DictConstants::WORD_LEVEL_FIELD_SIZE
|
||||
+ Ver4DictConstants::WORD_COUNT_FIELD_SIZE
|
||||
+ Ver4DictConstants::BIGRAM_TARGET_TERMINAL_ID_FIELD_SIZE;
|
||||
} else {
|
||||
return Ver4DictConstants::BIGRAM_FLAGS_FIELD_SIZE
|
||||
+ Ver4DictConstants::PROBABILITY_SIZE
|
||||
+ Ver4DictConstants::BIGRAM_TARGET_TERMINAL_ID_FIELD_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
bool runGCBigramList(const int bigramListPos,
|
||||
const BigramDictContent *const sourceBigramDictContent, const int toPos,
|
||||
const TerminalPositionLookupTable::TerminalIdMap *const terminalIdMap,
|
||||
|
|
Loading…
Reference in New Issue