From 7c66bd37c346c0bbf92502edec140b488e4af6e2 Mon Sep 17 00:00:00 2001 From: Dan Kennedy Date: Tue, 22 Jan 2019 12:21:28 +0000 Subject: [PATCH 0813/1009] Fix another segfault caused by a corrupt fts3 database. https://github.com/mackyle/sqlite/commit/7c66bd37c346c0bbf92502edec140b488e4af6e2 --- ext/fts3/fts3_write.c | 5 ++ 1 files changed, 5 insertions(+), 0 deletion(-) diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index df3c07e..3e195c3 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -2255,6 +2255,11 @@ static int fts3SegWriterAdd( nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm); nSuffix = nTerm-nPrefix; + /* If nSuffix is zero or less, then zTerm/nTerm must be a prefix of + ** pWriter->zTerm/pWriter->nTerm. i.e. must be equal to or less than when + ** compared with BINARY collation. This indicates corruption. */ + if( nSuffix<=0 ) return FTS_CORRUPT_VTAB; + /* Figure out how many bytes are required by this new entry */ nReq = sqlite3Fts3VarintLen(nPrefix) + /* varint containing prefix size */ sqlite3Fts3VarintLen(nSuffix) + /* varint containing suffix size */ -- 1.8.3.1