Skip to content

Commit ce68882

Browse files
committed
Fix a case where fts3 was erroneously reporting corruption.
1 parent be88b13 commit ce68882

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

ext/fts3/fts3_write.c

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4335,27 +4335,26 @@ static int fts3IncrmergeLoad(
43354335
while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader);
43364336
blobGrowBuffer(&pNode->key, reader.term.n, &rc);
43374337
if( rc==SQLITE_OK ){
4338-
if( reader.term.n<=0 ){
4339-
rc = FTS_CORRUPT_VTAB;
4340-
}else{
4338+
assert_fts3_nc( reader.term.n>0 || reader.aNode==0 );
4339+
if( reader.term.n>0 ){
43414340
memcpy(pNode->key.a, reader.term.a, reader.term.n);
4342-
pNode->key.n = reader.term.n;
4343-
if( i>0 ){
4344-
char *aBlock = 0;
4345-
int nBlock = 0;
4346-
pNode = &pWriter->aNodeWriter[i-1];
4347-
pNode->iBlock = reader.iChild;
4348-
rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock,0);
4349-
blobGrowBuffer(&pNode->block,
4350-
MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
4351-
);
4352-
if( rc==SQLITE_OK ){
4353-
memcpy(pNode->block.a, aBlock, nBlock);
4354-
pNode->block.n = nBlock;
4355-
memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING);
4356-
}
4357-
sqlite3_free(aBlock);
4341+
}
4342+
pNode->key.n = reader.term.n;
4343+
if( i>0 ){
4344+
char *aBlock = 0;
4345+
int nBlock = 0;
4346+
pNode = &pWriter->aNodeWriter[i-1];
4347+
pNode->iBlock = reader.iChild;
4348+
rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock,0);
4349+
blobGrowBuffer(&pNode->block,
4350+
MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc
4351+
);
4352+
if( rc==SQLITE_OK ){
4353+
memcpy(pNode->block.a, aBlock, nBlock);
4354+
pNode->block.n = nBlock;
4355+
memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING);
43584356
}
4357+
sqlite3_free(aBlock);
43594358
}
43604359
}
43614360
}

0 commit comments

Comments
 (0)