]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix minor OOM problems. persist-agginfo
authordrh <drh@noemail.net>
Sun, 7 Jun 2020 22:44:23 +0000 (22:44 +0000)
committerdrh <drh@noemail.net>
Sun, 7 Jun 2020 22:44:23 +0000 (22:44 +0000)
FossilOrigin-Name: 8b23d80271aab38abe42ee8b3ca4b746572ecef26c2a37b094b01560e6be9d45

manifest
manifest.uuid
src/expr.c

index ad5a11efd3daff84cfa148f6655503b3c531885d..5adab9d6c4c9c221c82bfc2127a493c97ed17fce 100644 (file)
--- 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
index 01928527e047efc50d9a25666c393ab0289f107d..5b9f0ff1f4673c490b23353210874bfe3dd88002 100644 (file)
@@ -1 +1 @@
-3c840b4df306e2db1da08673e9ede973b4cb6d2b3f9eeeab5835e39452ee3056
\ No newline at end of file
+8b23d80271aab38abe42ee8b3ca4b746572ecef26c2a37b094b01560e6be9d45
\ No newline at end of file
index b1beb2e3eb4db1fb93c0df96a1bafd28f4f4dfdc..6fbc8bb49c42a4cb508b83defe889dd6519af320 100644 (file)
@@ -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 && iAgg<pAggInfo->nColumn );
       if( pAggInfo->aCol[iAgg].pExpr==pExpr ){
         pExpr = sqlite3ExprDup(db, pExpr, 0);