Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a technically undefined signed integer overflow in fts5. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
e6bec37ea1ca51e1d048941ce4c5211d |
User & Date: | dan 2024-09-02 18:41:59.039 |
Context
2024-09-02
| ||
21:59 | Fix possible NULL pointer dereference following OOM in the new error reporting logic of the percentile extension. (check-in: 7891a266c4 user: drh tags: trunk) | |
18:41 | Fix a technically undefined signed integer overflow in fts5. (check-in: e6bec37ea1 user: dan tags: trunk) | |
17:27 | Make the percential extension easier to incorporate as a built-in on Windows applications. (check-in: 831e2be411 user: drh tags: trunk) | |
Changes
Changes to ext/fts5/fts5_index.c.
︙ | ︙ | |||
2181 2182 2183 2184 2185 2186 2187 | if( p->rc || pIter->pLeaf==0 ) return; pIter->iRowid = 0; iOff = 4; } if( iOff<pIter->iEndofDoclist ){ /* Next entry is on the current page */ | | | 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 | if( p->rc || pIter->pLeaf==0 ) return; pIter->iRowid = 0; iOff = 4; } if( iOff<pIter->iEndofDoclist ){ /* Next entry is on the current page */ u64 iDelta; iOff += sqlite3Fts5GetVarint(&pIter->pLeaf->p[iOff], (u64*)&iDelta); pIter->iLeafOffset = iOff; pIter->iRowid += iDelta; }else if( (pIter->flags & FTS5_SEGITER_ONETERM)==0 ){ if( pIter->pSeg ){ int nKeep = 0; if( iOff!=fts5LeafFirstTermOff(pIter->pLeaf) ){ |
︙ | ︙ |
Added ext/fts5/test/fts5integrity2.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # 2024 September 3 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # This file contains tests focused on the integrity-check procedure. # source [file join [file dirname [info script]] fts5_common.tcl] set testprefix fts5integrity2 # If SQLITE_ENABLE_FTS5 is not defined, omit this file. ifcapable !fts5 { finish_test return } do_execsql_test 2.0 { CREATE VIRTUAL TABLE t2 USING fts5(a, detail='none'); BEGIN; INSERT INTO t2(rowid, a) VALUES(-1, 'hello world'); INSERT INTO t2(rowid, a) VALUES(9223372036854775807, 'hello world'); COMMIT; } do_execsql_test 2.1 { SELECT rowid FROM t2('hello AND world'); } {-1 9223372036854775807} #------------------------------------------------------------------------- do_execsql_test 2.0 { CREATE VIRTUAL TABLE t1 USING fts5(a, detail='none'); CREATE TABLE r1(r); WITH c(x) AS (VALUES(1) UNION SELECT x<<1 FROM c) INSERT INTO r1(r) SELECT -1-x FROM c; INSERT INTO t1(rowid, a) SELECT r, 'abc' FROM r1; } do_execsql_test 2.1 { PRAGMA integrity_check; } {ok} do_execsql_test 2.2 { SELECT rowid FROM t1('abc') ORDER BY +rowid; } [db eval {SELECT r FROM r1 ORDER BY r}] finish_test |