From f3d5a684610ed339a90cbb6f4ed8ea4db13b5f53 Mon Sep 17 00:00:00 2001 From: dan Date: Fri, 23 Apr 2021 11:37:01 +0000 Subject: [PATCH] Fix an assert() in fts5_index.c that may fail if the database records are corrupt. FossilOrigin-Name: dfadb96edfef1d49e48a659264b9eb8d7f98d95d159d95c92c30dd4ba6c6e739 --- ext/fts5/fts5_index.c | 3 +- ext/fts5/test/fts5corrupt3.test | 201 ++++++++++++++++++++++++++++++++ manifest | 18 +-- manifest.uuid | 2 +- test/altertab.test | 13 +++ 5 files changed, 226 insertions(+), 11 deletions(-) diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index 858b549cf8..869d7a8b71 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -5079,7 +5079,8 @@ static void fts5MergePrefixLists( nTail = pHead->iter.nPoslist - pHead->iOff; /* WRITEPOSLISTSIZE */ - assert( tmp.n+nTail<=nTmp ); + assert_nc( tmp.n+nTail<=nTmp ); + assert( tmp.n+nTail<=nTmp+nMerge*10 ); if( tmp.n+nTail>nTmp-FTS5_DATA_ZERO_PADDING ){ if( p->rc==SQLITE_OK ) p->rc = FTS5_CORRUPT; break; diff --git a/ext/fts5/test/fts5corrupt3.test b/ext/fts5/test/fts5corrupt3.test index 9b43f3e069..631cb2159c 100644 --- a/ext/fts5/test/fts5corrupt3.test +++ b/ext/fts5/test/fts5corrupt3.test @@ -14591,6 +14591,207 @@ do_catchsql_test 74.1 { SELECT rowid, quote(matchinfo(t1,'p�xyb