From: drh Date: Sun, 7 Jun 2020 22:44:23 +0000 (+0000) Subject: Fix minor OOM problems. X-Git-Tag: version-3.33.0~141^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f82acc036c5f286fda6ef815bfc3469acd402e2;p=thirdparty%2Fsqlite.git Fix minor OOM problems. FossilOrigin-Name: 8b23d80271aab38abe42ee8b3ca4b746572ecef26c2a37b094b01560e6be9d45 --- diff --git a/manifest b/manifest index ad5a11efd3..5adab9d6c4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C AggInfo\sobjects\smight\sbe\sreferenced\seven\safter\sthe\ssqlite3Select()\sfunction\nthat\screated\sthem\shas\sexited.\s\sSo\sAggInfo\scannot\sbe\sa\sstack\svariable.\s\sAnd\sit\nmust\snot\sbe\sfreed\suntil\sthe\sParse\sobject\sis\sdestroyed. -D 2020-06-07T20:18:07.068 +C Fix\sminor\sOOM\sproblems. +D 2020-06-07T22:44:23.371 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -485,7 +485,7 @@ F src/date.c b29b349d277e3d579dcc295b24c0a2caed83fd8f090a9f7cbe6070c0fd662384 F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 793deaf88a0904f88285d93d6713c636d55ede0ffd9f08d10f4ea825531d367f F src/delete.c 88047c8e59878c920fce14582bc1dde4d81157d1ca5ffdf36c2907e6d41996c4 -F src/expr.c 3ee54650bbf8cf1003bee34bbeca354c9c7bddab3ef66ba618f806a1c7c51b4b +F src/expr.c 217bee94b696a061fec28526c5d5ef3049536ace5c10a0a3ff7d15b0d3a9cd11 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 4b575423b0a5d4898b1a7868ce985cf1a8ad91c741c9abbb108ff02536d20f41 F src/func.c 2333eb4277f55a5efdc12ef754e7d7ec9105d257b2fd00301d23ce1e8fa67dc0 @@ -1866,7 +1866,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 7682d8a768fbccfe0cc956e9f6481637146e1ab9763b248ff11052761ce32e32 -R aa0e843c27b9cda2c788e9652bc81696 +P 3c840b4df306e2db1da08673e9ede973b4cb6d2b3f9eeeab5835e39452ee3056 +R 5a67d9ba1d91119ad620e46132adbad1 U drh -Z e618df7dc043f3b81d6494dff0ad5e1b +Z 23a540eb57cb09221e33c4eabdced32a diff --git a/manifest.uuid b/manifest.uuid index 01928527e0..5b9f0ff1f4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3c840b4df306e2db1da08673e9ede973b4cb6d2b3f9eeeab5835e39452ee3056 \ No newline at end of file +8b23d80271aab38abe42ee8b3ca4b746572ecef26c2a37b094b01560e6be9d45 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index b1beb2e3eb..6fbc8bb49c 100644 --- a/src/expr.c +++ b/src/expr.c @@ -52,7 +52,12 @@ char sqlite3ExprAffinity(const Expr *pExpr){ op = pExpr->op; if( op==TK_SELECT ){ assert( pExpr->flags&EP_xIsSelect ); - return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + if( ALWAYS(pExpr->x.pSelect) + && pExpr->x.pSelect->pEList + && ALWAYS(pExpr->x.pSelect->pEList->a[0].pExpr) + ){ + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + } } if( op==TK_REGISTER ) op = pExpr->op2; #ifndef SQLITE_OMIT_CAST @@ -5723,16 +5728,15 @@ int sqlite3FunctionUsesThisSrc(Expr *pExpr, SrcList *pSrcList){ ** will not generate any code in the preamble. */ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ - if( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) + if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced)) && pExpr->pAggInfo!=0 ){ AggInfo *pAggInfo = pExpr->pAggInfo; int iAgg = pExpr->iAgg; Parse *pParse = pWalker->pParse; sqlite3 *db = pParse->db; - assert( pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN - || pExpr->op==TK_FUNCTION || pExpr->op==TK_AGG_FUNCTION ); - if( pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN ){ + assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION ); + if( pExpr->op==TK_AGG_COLUMN ){ assert( iAgg>=0 && iAggnColumn ); if( pAggInfo->aCol[iAgg].pExpr==pExpr ){ pExpr = sqlite3ExprDup(db, pExpr, 0);