> -----Original Message-----
> From: sqlite-users 
> [mailto:sqlite-users-boun...@mailinglists.sqlite.org] On 
> Behalf Of Ignacio Losiggio
> Sent: Tuesday, February 19, 2019 6:27 PM
> To: sqlite-users@mailinglists.sqlite.org
> Subject: [sqlite] sqlite segfault on INNER JOIN ON (...) + 
> WHERE field IN (list, of, items)
> 
> 
> (I'm sorry if my description of the bug is not good. I tried 
> to get as 
> much
> information possible before sending this email).
> 
> A few days ago I encountered some weird segfaults on my django 
> application.
> After a bit of troubleshooting I realized that the applications was 
> crashing on
> the sqlite library.
> 
> I dumped the database and recompiled python with debugging symbols to 
> get the
> segfaulting query. After some digging I managed to get a small 
> reproduction of
> the segfault:
> 
> CREATE TABLE IF NOT EXISTS t (id integer NOT NULL PRIMARY KEY 
> AUTOINCREMENT);
> INSERT INTO t VALUES(1);
> SELECT a.id FROM t AS a INNER JOIN t as b ON a.id = b.id 
> WHERE a.id IN 
> (1, 2, 3);
> 
> Once I got that I installed fossil and bisected the segfault to the
> e130319317e76119 version, below is the output of `fossil chart`:
> 
>   1 BAD     2019-02-19 20:29:05 f16d127c3b4a735a
>   3 BAD     2019-01-14 13:32:15 ddc3697efd61830f
>   5 BAD     2019-01-05 21:09:37 598d7358e7329f0d
>   7 BAD     2019-01-03 15:17:01 bef216dfa1456a78
>   8 BAD     2019-01-01 19:17:42 911342f7512145a8
>   9 BAD     2018-12-31 21:43:55 b57c545a384ab5d6
>  10 BAD     2018-12-31 20:39:37 e130319317e76119
>  11 GOOD    2018-12-31 17:58:05 f856676c8438dbf5 CURRENT
>   6 GOOD    2018-12-31 16:36:42 4678cb1044f0b4dc
>   4 GOOD    2018-12-24 20:00:27 3873941c4fb9aa2d
>   2 GOOD    2018-12-01 12:34:55 bf8c1b2b7a5960c2
> 
> I don't have experience with fossil nor sqlite3 nor SQL in 
> general, so 
> I really
> don't know how to add more information to this report.
> 
> 
> Thanks in advance.


Wow; can confirm. I crashed it in my debugger in the amalgamation of 3.27.1
in the function SQLITE_PRIVATE RecordCompare
sqlite3VdbeFindCompare(UnpackedRecord *p)

At line 80720,   if( p->pKeyInfo->nAllField<=13 )

in that case:
pKeyInfo is NULL

Stack traceback:

        sqlite3.exe!sqlite3VdbeFindCompare(UnpackedRecord * p) Line 80720
        sqlite3.exe!sqlite3BtreeMovetoUnpacked(BtCursor * pCur,
UnpackedRecord * pIdxKey, __int64 intKey, int biasRight, int * pRes) Line
68434
        sqlite3.exe!sqlite3VdbeExec(Vdbe * p) Line 87626
        sqlite3.exe!sqlite3Step(Vdbe * p) Line 81718
        sqlite3.exe!sqlite3_step(sqlite3_stmt * pStmt) Line 81784
        sqlite3.exe!exec_prepared_stmt(ShellState * pArg, sqlite3_stmt *
pStmt) Line 10445
        sqlite3.exe!shell_exec(ShellState * pArg, const char * zSql, char *
* pzErrMsg) Line 10752
        sqlite3.exe!runOneSqlLine(ShellState * p, char * zSql, _iobuf * in,
int startline) Line 16106
        sqlite3.exe!process_input(ShellState * p) Line 16206
        sqlite3.exe!wmain(int argc, wchar_t * * wargv) Line 16959

Hth a little.

Cheers,
-dave


_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to