aboutsummaryrefslogtreecommitdiff
path: root/src/sqliteInt.h
diff options
context:
space:
mode:
authordan <dan@noemail.net>2015-11-07 18:07:15 +0000
committerdan <dan@noemail.net>2015-11-07 18:07:15 +0000
commitcc033054734028fa582afe17521afce3da433df5 (patch)
tree1c92d9e981db7cb3ef9a659a8c0d5021e4630368 /src/sqliteInt.h
parentd6b7946c32ec1cf4b77f51ab82db553cf466c488 (diff)
parentfe88fbfc828594d00999649ab6a8dcff5db64821 (diff)
downloadsqlite-cc033054734028fa582afe17521afce3da433df5.tar.gz
sqlite-cc033054734028fa582afe17521afce3da433df5.zip
Fix a bug in CTE handling discovered by LibFuzzer that can cause an infinite loop in the query planner.
FossilOrigin-Name: 088009efdd56160bb4eee0fbd829a529b141274e
Diffstat (limited to 'src/sqliteInt.h')
-rw-r--r--src/sqliteInt.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 2b9ece78e..c65e0f205 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -2754,7 +2754,6 @@ struct Parse {
int nVar; /* Number of '?' variables seen in the SQL so far */
int nzVar; /* Number of available slots in azVar[] */
u8 iPkSortOrder; /* ASC or DESC for INTEGER PRIMARY KEY */
- u8 bFreeWith; /* True if pWith should be freed with parser */
u8 explain; /* True if the EXPLAIN flag is found on the query */
#ifndef SQLITE_OMIT_VIRTUALTABLE
u8 declareVtab; /* True if inside sqlite3_declare_vtab() */
@@ -2781,6 +2780,7 @@ struct Parse {
Table *pZombieTab; /* List of Table objects to delete after code gen */
TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */
With *pWith; /* Current WITH clause, or NULL */
+ With *pWithToFree; /* Free this WITH object at the end of the parse */
};
/*
@@ -3271,6 +3271,7 @@ char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
void sqlite3TreeViewExpr(TreeView*, const Expr*, u8);
void sqlite3TreeViewExprList(TreeView*, const ExprList*, u8, const char*);
void sqlite3TreeViewSelect(TreeView*, const Select*, u8);
+ void sqlite3TreeViewWith(TreeView*, const With*, u8);
#endif