diff options
author | dan <dan@noemail.net> | 2019-02-03 07:46:07 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2019-02-03 07:46:07 +0000 |
commit | 41fc5451475d52da02c6f10224de7937e56cc1aa (patch) | |
tree | 5df72f754e71cde1ec66d54df2f854a58a0fdc46 /ext/fts3/fts3_snippet.c | |
parent | 150edadf586e793489ba7ffbb76a34d4d874d6dd (diff) | |
download | sqlite-41fc5451475d52da02c6f10224de7937e56cc1aa.tar.gz sqlite-41fc5451475d52da02c6f10224de7937e56cc1aa.zip |
Fix an assertion failure in fts3 triggered by a corrupt database.
FossilOrigin-Name: 560ebd4269fad07b8e988d070454017123593eb6762597d08e8c32d7b4fb92ac
Diffstat (limited to 'ext/fts3/fts3_snippet.c')
-rw-r--r-- | ext/fts3/fts3_snippet.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/ext/fts3/fts3_snippet.c b/ext/fts3/fts3_snippet.c index 58419536a..115e98abf 100644 --- a/ext/fts3/fts3_snippet.c +++ b/ext/fts3/fts3_snippet.c @@ -476,11 +476,14 @@ static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){ int iFirst = 0; pPhrase->pList = pCsr; fts3GetDeltaPosition(&pCsr, &iFirst); - assert( iFirst>=0 ); - pPhrase->pHead = pCsr; - pPhrase->pTail = pCsr; - pPhrase->iHead = iFirst; - pPhrase->iTail = iFirst; + if( iFirst<0 ){ + rc = FTS_CORRUPT_VTAB; + }else{ + pPhrase->pHead = pCsr; + pPhrase->pTail = pCsr; + pPhrase->iHead = iFirst; + pPhrase->iTail = iFirst; + } }else{ assert( rc!=SQLITE_OK || ( pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 |