am cecb793f: am ef63947f: (-s ours) Add boundary checking for PtNode Array reading. DO NOT MERGE
* commit 'cecb793ff36539f5938db764cad73d88fa399192':main
commit
83d1648b2c
|
@ -26,8 +26,7 @@ namespace latinime {
|
||||||
void DynamicPatriciaTrieNodeReader::fetchPtNodeInfoFromBufferAndProcessMovedPtNode(
|
void DynamicPatriciaTrieNodeReader::fetchPtNodeInfoFromBufferAndProcessMovedPtNode(
|
||||||
const int ptNodePos, const int maxCodePointCount, int *const outCodePoints) {
|
const int ptNodePos, const int maxCodePointCount, int *const outCodePoints) {
|
||||||
if (ptNodePos < 0 || ptNodePos >= mBuffer->getTailPosition()) {
|
if (ptNodePos < 0 || ptNodePos >= mBuffer->getTailPosition()) {
|
||||||
// Reading invalid position because of bug or broken dictionary.
|
AKLOGE("Fetching PtNode info form invalid dictionary position: %d, dictionary size: %d",
|
||||||
AKLOGE("Fetching PtNode info from invalid dictionary position: %d, dictionary size: %d",
|
|
||||||
ptNodePos, mBuffer->getTailPosition());
|
ptNodePos, mBuffer->getTailPosition());
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
invalidatePtNodeInfo();
|
invalidatePtNodeInfo();
|
||||||
|
|
|
@ -155,15 +155,6 @@ bool DynamicPatriciaTrieReadingHelper::traverseAllPtNodesInPtNodeArrayLevelPreor
|
||||||
// Read node array size and process empty node arrays. Nodes and arrays are counted up in this
|
// Read node array size and process empty node arrays. Nodes and arrays are counted up in this
|
||||||
// method to avoid an infinite loop.
|
// method to avoid an infinite loop.
|
||||||
void DynamicPatriciaTrieReadingHelper::nextPtNodeArray() {
|
void DynamicPatriciaTrieReadingHelper::nextPtNodeArray() {
|
||||||
if (mReadingState.mPos < 0 || mReadingState.mPos >= mBuffer->getTailPosition()) {
|
|
||||||
// Reading invalid position because of a bug or a broken dictionary.
|
|
||||||
AKLOGE("Reading PtNode array info from invalid dictionary position: %d, dict size: %d",
|
|
||||||
mReadingState.mPos, mBuffer->getTailPosition());
|
|
||||||
ASSERT(false);
|
|
||||||
mIsError = true;
|
|
||||||
mReadingState.mPos = NOT_A_DICT_POS;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mReadingState.mPosOfLastPtNodeArrayHead = mReadingState.mPos;
|
mReadingState.mPosOfLastPtNodeArrayHead = mReadingState.mPos;
|
||||||
const bool usesAdditionalBuffer = mBuffer->isInAdditionalBuffer(mReadingState.mPos);
|
const bool usesAdditionalBuffer = mBuffer->isInAdditionalBuffer(mReadingState.mPos);
|
||||||
const uint8_t *const dictBuf = mBuffer->getBuffer(usesAdditionalBuffer);
|
const uint8_t *const dictBuf = mBuffer->getBuffer(usesAdditionalBuffer);
|
||||||
|
@ -200,15 +191,6 @@ void DynamicPatriciaTrieReadingHelper::nextPtNodeArray() {
|
||||||
|
|
||||||
// Follow the forward link and read the next node array if exists.
|
// Follow the forward link and read the next node array if exists.
|
||||||
void DynamicPatriciaTrieReadingHelper::followForwardLink() {
|
void DynamicPatriciaTrieReadingHelper::followForwardLink() {
|
||||||
if (mReadingState.mPos < 0 || mReadingState.mPos >= mBuffer->getTailPosition()) {
|
|
||||||
// Reading invalid position because of bug or broken dictionary.
|
|
||||||
AKLOGE("Reading forward link from invalid dictionary position: %d, dict size: %d",
|
|
||||||
mReadingState.mPos, mBuffer->getTailPosition());
|
|
||||||
ASSERT(false);
|
|
||||||
mIsError = true;
|
|
||||||
mReadingState.mPos = NOT_A_DICT_POS;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const bool usesAdditionalBuffer = mBuffer->isInAdditionalBuffer(mReadingState.mPos);
|
const bool usesAdditionalBuffer = mBuffer->isInAdditionalBuffer(mReadingState.mPos);
|
||||||
const uint8_t *const dictBuf = mBuffer->getBuffer(usesAdditionalBuffer);
|
const uint8_t *const dictBuf = mBuffer->getBuffer(usesAdditionalBuffer);
|
||||||
if (usesAdditionalBuffer) {
|
if (usesAdditionalBuffer) {
|
||||||
|
|
|
@ -240,7 +240,6 @@ class DynamicPatriciaTrieReadingHelper {
|
||||||
static const int MAX_NODE_ARRAY_COUNT_TO_AVOID_INFINITE_LOOP;
|
static const int MAX_NODE_ARRAY_COUNT_TO_AVOID_INFINITE_LOOP;
|
||||||
static const size_t MAX_READING_STATE_STACK_SIZE;
|
static const size_t MAX_READING_STATE_STACK_SIZE;
|
||||||
|
|
||||||
// TODO: Introduce error code to track what caused the error.
|
|
||||||
bool mIsError;
|
bool mIsError;
|
||||||
ReadingState mReadingState;
|
ReadingState mReadingState;
|
||||||
const BufferWithExtendableBuffer *const mBuffer;
|
const BufferWithExtendableBuffer *const mBuffer;
|
||||||
|
|
Loading…
Reference in New Issue