aboutsummaryrefslogtreecommitdiff
path: root/src/alter.c
diff options
context:
space:
mode:
authordrh <>2021-10-07 20:46:29 +0000
committerdrh <>2021-10-07 20:46:29 +0000
commit477572b9f1afc0d4f377554b64ad2c2c9e3146ac (patch)
tree329242c96a36f3ee18f21d3bf988140d5f4c24bb /src/alter.c
parent867bc4de2e998280e1c34c4d828708f9cb8bf62a (diff)
downloadsqlite-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.c12
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;