diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/build.c | 14 | ||||
-rw-r--r-- | src/update.c | 11 |
2 files changed, 14 insertions, 11 deletions
diff --git a/src/build.c b/src/build.c index f0136cbe8..c9396708d 100644 --- a/src/build.c +++ b/src/build.c @@ -4501,15 +4501,15 @@ void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){ ** are deleted by this function. */ SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2){ - if( p2 && p1 ){ - assert( p1->nSrc==1 ); - p1 = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, p1->nSrc); - if( p1 ){ - assert( p1->nSrc==1+p2->nSrc ); + assert( p1 && p1->nSrc==1 ); + if( p2 ){ + SrcList *pNew = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, 1); + if( pNew==0 ){ + sqlite3SrcListDelete(pParse->db, p2); + }else{ + p1 = pNew; memcpy(&p1->a[1], p2->a, p2->nSrc*sizeof(struct SrcList_item)); sqlite3_free(p2); - }else{ - sqlite3SrcListDelete(pParse->db, p2); } } return p1; diff --git a/src/update.c b/src/update.c index fa80a7da8..0b98e7017 100644 --- a/src/update.c +++ b/src/update.c @@ -229,10 +229,13 @@ static void updatePopulateEphTable( ); } } - for(i=0; i<pChanges->nExpr; i++){ - pList = sqlite3ExprListAppend(pParse, pList, - sqlite3ExprDup(db, pChanges->a[i].pExpr, 0) - ); + assert( pChanges || db->mallocFailed ); + if( pChanges ){ + for(i=0; i<pChanges->nExpr; i++){ + pList = sqlite3ExprListAppend(pParse, pList, + sqlite3ExprDup(db, pChanges->a[i].pExpr, 0) + ); + } } pSelect = sqlite3SelectNew( pParse, pList, pSrc, pWhere2, pGroupBy, 0, pOrderBy2, 0, pLimit2 |