aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2021-04-17 13:46:23 +0000
committerdrh <>2021-04-17 13:46:23 +0000
commit7b0d34fe32ef3b62b86647ff6eb7d04bd360f67d (patch)
tree559c5e1afeb4921cff792bd0eb8896d0615f6ed8 /src
parent1929cc0d8aac2e7fa7732f3bd4eca60f7d4c16ba (diff)
downloadsqlite-7b0d34fe32ef3b62b86647ff6eb7d04bd360f67d.tar.gz
sqlite-7b0d34fe32ef3b62b86647ff6eb7d04bd360f67d.zip
Ensure that variables are not used in the WINDOW clause of a query inside
of a trigger. dbsqlfuzz d9cf66100064952b66951845dfab41de1c124611 FossilOrigin-Name: 1a341378ab24a5091e6cf03b9e957d11b2bfe5c711835e8c583785f8fa0125d3
Diffstat (limited to 'src')
-rw-r--r--src/attach.c1
-rw-r--r--src/sqliteInt.h1
-rw-r--r--src/walker.c10
3 files changed, 8 insertions, 4 deletions
diff --git a/src/attach.c b/src/attach.c
index 8eb4486e5..8fcfb0438 100644
--- a/src/attach.c
+++ b/src/attach.c
@@ -514,6 +514,7 @@ void sqlite3FixInit(
pFix->w.xSelectCallback2 = 0;
pFix->w.walkerDepth = 0;
pFix->w.eCode = 0;
+ pFix->w.bWalkWinDefn = 1;
pFix->w.u.pFix = pFix;
}
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index f4944c2ed..69d9b4912 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -3833,6 +3833,7 @@ struct Walker {
void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */
int walkerDepth; /* Number of subqueries */
u16 eCode; /* A small processing code */
+ unsigned bWalkWinDefn : 1; /* True to walk pWinDefn */
union { /* Extra data for callback */
NameContext *pNC; /* Naming context */
int n; /* A counter */
diff --git a/src/walker.c b/src/walker.c
index 927f7e52d..648363881 100644
--- a/src/walker.c
+++ b/src/walker.c
@@ -130,10 +130,12 @@ int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
-#if !defined(SQLITE_OMIT_WINDOWFUNC) && !defined(SQLITE_OMIT_ALTERTABLE)
- {
- Parse *pParse = pWalker->pParse;
- if( pParse && IN_RENAME_OBJECT ){
+#if !defined(SQLITE_OMIT_WINDOWFUNC)
+ if( p->pWinDefn ){
+ Parse *pParse;
+ if( pWalker->bWalkWinDefn
+ || ((pParse = pWalker->pParse)!=0 && IN_RENAME_OBJECT)
+ ){
/* The following may return WRC_Abort if there are unresolvable
** symbols (e.g. a table that does not exist) in a window definition. */
int rc = walkWindowList(pWalker, p->pWinDefn, 0);