SQLite Forum

Assertion failure when enable/disable optimizations
Login

Assertion failure when enable/disable optimizations

(1) By Song Liu (songliu) on 2023-03-24 16:04:39 [source]

I found an assertion failure while SQLite (latest, 95c7af79cf) executes the following queries. The assertion failure may be caused by the optimizations. SQLite crashed by default with all optimizations enabled. If I disabled all optimizations, SQLite works well.

Here is the poc:

CREATE TABLE v1 ( c1 ); 
CREATE INDEX i1 ON v1 ( c1, c1, c1, c1, c1 || 2  ); 
CREATE INDEX i2 ON v1 ( 1 < 2 ); 
INSERT INTO v1 VALUES ( 0 ); 

.testctrl optimizations 0xffffffff;
.print '-- disable optimization'
ANALYZE; 

.testctrl optimizations 0x00000000;
.print '-- enable optimization'
ANALYZE; 

Here are the outputs:

-- disable optimization
-- enable optimization
sqlite3: sqlite3.c:92063: sqlite3VdbeExec: Assertion `pIn1!=pOut' failed.
[1]    2667182 abort      ./sqlite3 < poc

My compilation flags:

    export CFLAGS="-g -O0 -DSQLITE_DEBUG 
                -DSQLITE_ENABLE_TREETRACE 
                -DSQLITE_ENABLE_WHERETRACE
                -DSQLITE_ENABLE_CURSOR_HINTS 
                -DSQLITE_COUNTOFVIEW_OPTIMIZATION 
                -DSQLITE_ENABLE_STAT4" 

(2) By Richard Hipp (drh) on 2023-03-24 17:03:23 in reply to 1 [link] [source]

The problem only arises when you are using STAT4. Disabling all optimizations disables STAT4, which is why it works with all optimizations disabled.

Now fixed on trunk and on branch-3.41.

(3) By Song Liu (songliu) on 2023-03-24 17:13:03 in reply to 2 [link] [source]

Thanks for your explanation and efforts!