aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/alter.c2
-rw-r--r--src/build.c4
-rw-r--r--src/expr.c8
-rw-r--r--src/select.c2
-rw-r--r--src/walker.c2
5 files changed, 13 insertions, 5 deletions
diff --git a/src/alter.c b/src/alter.c
index e9640d238..b68e18914 100644
--- a/src/alter.c
+++ b/src/alter.c
@@ -1575,7 +1575,7 @@ static int renameTableSelectCb(Walker *pWalker, Select *pSelect){
RenameCtx *p = pWalker->u.pRename;
SrcList *pSrc = pSelect->pSrc;
if( pSelect->selFlags & SF_View ) return WRC_Prune;
- if( pSrc==0 ){
+ if( NEVER(pSrc==0) ){
assert( pWalker->pParse->db->mallocFailed );
return WRC_Abort;
}
diff --git a/src/build.c b/src/build.c
index ecc08f60f..5506d36de 100644
--- a/src/build.c
+++ b/src/build.c
@@ -4595,8 +4595,8 @@ SrcList *sqlite3SrcListAppend(
void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
int i;
SrcItem *pItem;
- assert(pList || pParse->db->mallocFailed );
- if( pList ){
+ assert( pList || pParse->db->mallocFailed );
+ if( ALWAYS(pList) ){
for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
if( pItem->iCursor>=0 ) continue;
pItem->iCursor = pParse->nTab++;
diff --git a/src/expr.c b/src/expr.c
index d9c8af65c..bd45fbcd1 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -1648,6 +1648,14 @@ Select *sqlite3SelectDup(sqlite3 *db, Select *pDup, int flags){
if( p->pWin && db->mallocFailed==0 ) gatherSelectWindows(pNew);
#endif
pNew->selId = p->selId;
+ if( db->mallocFailed ){
+ /* Any prior OOM might have left the Select object incomplete.
+ ** Delete the whole thing rather than allow an incomplete Select
+ ** to be used by the code generator. */
+ pNew->pNext = 0;
+ sqlite3SelectDelete(db, pNew);
+ break;
+ }
*pp = pNew;
pp = &pNew->pPrior;
pNext = pNew;
diff --git a/src/select.c b/src/select.c
index 92c2ecf8f..6a773202e 100644
--- a/src/select.c
+++ b/src/select.c
@@ -4207,7 +4207,7 @@ static int flattenSubquery(
p->pPrior = pPrior;
}else{
pNew->selId = ++pParse->nSelect;
- if( aCsrMap && db->mallocFailed==0 ){
+ if( aCsrMap && ALWAYS(db->mallocFailed==0) ){
renumberCursors(pParse, pNew, iFrom, aCsrMap);
}
pNew->pPrior = pPrior;
diff --git a/src/walker.c b/src/walker.c
index 28c80fa79..e0acd5de2 100644
--- a/src/walker.c
+++ b/src/walker.c
@@ -164,7 +164,7 @@ int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
SrcItem *pItem;
pSrc = p->pSrc;
- if( pSrc ){
+ if( ALWAYS(pSrc) ){
for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){
return WRC_Abort;