diff options
author | dan <Dan Kennedy> | 2021-06-11 12:14:58 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2021-06-11 12:14:58 +0000 |
commit | d03d3a9b745aa5a32370bc41fc0d43cf51b3900c (patch) | |
tree | ea4d5d28e71b84629f35f5e33e2023b07cd0c371 /src | |
parent | 6065686d9c72963c238a4d911cccb99606262a6b (diff) | |
download | sqlite-d03d3a9b745aa5a32370bc41fc0d43cf51b3900c.tar.gz sqlite-d03d3a9b745aa5a32370bc41fc0d43cf51b3900c.zip |
Fix a crash in new ALTER TABLE code that could follow an OOM.
FossilOrigin-Name: 6f1f2a0a9cd75ca43b81cc325296b843ccefe6f8040da8f2e873f49928423f10
Diffstat (limited to 'src')
-rw-r--r-- | src/alter.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/alter.c b/src/alter.c index c1a8e2476..e5f1eb315 100644 --- a/src/alter.c +++ b/src/alter.c @@ -812,18 +812,19 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){ assert( pWith->nCte>0 ); assert( (pWith->a[0].pSelect->selFlags & SF_Expanded)==0 ); pCopy = sqlite3WithDup(pParse->db, pWith); - sqlite3WithPush(pParse, pCopy, 1); - - for(i=0; i<pWith->nCte; i++){ - Select *p = pWith->a[i].pSelect; - NameContext sNC; - memset(&sNC, 0, sizeof(sNC)); - sNC.pParse = pParse; - sqlite3SelectPrep(sNC.pParse, p, &sNC); - sqlite3WalkSelect(pWalker, p); - sqlite3RenameExprlistUnmap(pParse, pWith->a[i].pCols); + if( pCopy ){ + sqlite3WithPush(pParse, pCopy, 1); + for(i=0; i<pWith->nCte; i++){ + Select *p = pWith->a[i].pSelect; + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sqlite3SelectPrep(sNC.pParse, p, &sNC); + sqlite3WalkSelect(pWalker, p); + sqlite3RenameExprlistUnmap(pParse, pWith->a[i].pCols); + } + pParse->pWith = pCopy->pOuter; } - pParse->pWith = pCopy->pOuter; } } |