diff options
author | drh <> | 2021-03-31 13:31:33 +0000 |
---|---|---|
committer | drh <> | 2021-03-31 13:31:33 +0000 |
commit | b3ad4e611854dd5f4ad26378c4cfccf9f0c858dd (patch) | |
tree | 90a34dd0350c25af32bd33caca8e8d8edcdb42b6 /src/sqliteInt.h | |
parent | b03786ad6e89e1b38d94dfe9ca48aee921a97196 (diff) | |
download | sqlite-b3ad4e611854dd5f4ad26378c4cfccf9f0c858dd.tar.gz sqlite-b3ad4e611854dd5f4ad26378c4cfccf9f0c858dd.zip |
Defer deletion of expressions that are optimized out by the AND optimizer
in the sqlite3ExprAnd() routine until the corresponding Parse object is
deleted. This avoids a dangling pointer in AggInfo if sqlite3ExprAnd()
is invoked by the push-down optimization. The dangling pointer appears
to be harmless in release builds, only showing up in debug builds.
Problem found by dbsqlfuzz.
FossilOrigin-Name: c36b43589abd9f62a709bdb47b8748e0c1e8743487a3d83d1eb35eb06b65d763
Diffstat (limited to 'src/sqliteInt.h')
-rw-r--r-- | src/sqliteInt.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 09a692d1b..fcc50e157 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -4287,6 +4287,7 @@ Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*, int); void sqlite3ExprFunctionUsable(Parse*,Expr*,FuncDef*); void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); void sqlite3ExprDelete(sqlite3*, Expr*); +void sqlite3ExprDeferredDelete(Parse*, Expr*); void sqlite3ExprUnmapAndDelete(Parse*, Expr*); ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); |