SQLite

View Ticket
Login
Ticket Hash: a7b7803e8d1e8699cd8a460a38133b98892d2e17
Title: crash when filtering twice by same predicate using aliases
Status: Fixed Type: Code_Defect
Severity: Critical Priority: Immediate
Subsystem: Code_Generator Resolution: Fixed
Last Modified: 2012-12-19 16:58:04
Version Found In: 3.7.15
User Comments:
nobody added on 2012-12-19 15:01:05: (text/x-fossil-wiki)
Try the following:
<pre>
 create table name (
   type integer,
   path text primary key);

 select (name.type = 0) as container from Name name where name.type = 0 or    container order by name.path
</pre>
---

The select statement crashes during query preparation.


[7b96115e81deab0aa0472839cf787ba3f2fc64a7]

<pre>
  char sqlite3ExprAffinity(Expr *pExpr){
    int op;
    pExpr = sqlite3ExprSkipCollate(pExpr);
    int op = pExpr->op;                               
    op = pExpr->op;
    ...
</pre>
last line crashes because sqlite3ExprSkipCollate returns null.

nobody added on 2012-12-19 15:13:42: (text/x-fossil-plain)
pExpr is already NULL from caller 'exprAnalyzeOrTerm' -> affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight);

drh added on 2012-12-19 15:16:52: (text/x-fossil-wiki)
Bisecting shows that the bug was introduced by the refactoring of COLLATE at
check-in [8542e6180d4321d45b], just a few days prior to the release of
version 3.7.15, and needed to address bug [71e333e7d2e642afc96d2].  

So, we fixed one bug but in the process introduced another....