diff options
author | drh <> | 2021-10-07 20:46:29 +0000 |
---|---|---|
committer | drh <> | 2021-10-07 20:46:29 +0000 |
commit | 477572b9f1afc0d4f377554b64ad2c2c9e3146ac (patch) | |
tree | 329242c96a36f3ee18f21d3bf988140d5f4c24bb /src/alter.c | |
parent | 867bc4de2e998280e1c34c4d828708f9cb8bf62a (diff) | |
download | sqlite-477572b9f1afc0d4f377554b64ad2c2c9e3146ac.tar.gz sqlite-477572b9f1afc0d4f377554b64ad2c2c9e3146ac.zip |
Protect access to the Expr.y union using nearby assert()s and branches.
FossilOrigin-Name: 87e2f5eb436fc448427b0e24fb70f29688796b513b8c7b12f1a21540dae1e56d
Diffstat (limited to 'src/alter.c')
-rw-r--r-- | src/alter.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/alter.c b/src/alter.c index 8b8fbf2be..89e5a30fa 100644 --- a/src/alter.c +++ b/src/alter.c @@ -805,7 +805,9 @@ void sqlite3RenameTokenRemap(Parse *pParse, const void *pTo, const void *pFrom){ static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){ Parse *pParse = pWalker->pParse; sqlite3RenameTokenRemap(pParse, 0, (const void*)pExpr); - sqlite3RenameTokenRemap(pParse, 0, (const void*)&pExpr->y.pTab); + if( ExprUseYTab(pExpr) ){ + sqlite3RenameTokenRemap(pParse, 0, (const void*)&pExpr->y.pTab); + } return WRC_Continue; } @@ -1003,7 +1005,8 @@ static int renameColumnExprCb(Walker *pWalker, Expr *pExpr){ ){ renameTokenFind(pWalker->pParse, p, (void*)pExpr); }else if( pExpr->op==TK_COLUMN - && pExpr->iColumn==p->iCol + && pExpr->iColumn==p->iCol + && ALWAYS(ExprUseYTab(pExpr)) && p->pTab==pExpr->y.pTab ){ renameTokenFind(pWalker->pParse, p, (void*)pExpr); @@ -1606,7 +1609,10 @@ renameColumnFunc_done: */ static int renameTableExprCb(Walker *pWalker, Expr *pExpr){ RenameCtx *p = pWalker->u.pRename; - if( pExpr->op==TK_COLUMN && p->pTab==pExpr->y.pTab ){ + if( pExpr->op==TK_COLUMN + && ALWAYS(ExprUseYTab(pExpr)) + && p->pTab==pExpr->y.pTab + ){ renameTokenFind(pWalker->pParse, p, (void*)&pExpr->y.pTab); } return WRC_Continue; |