From: drh <> Date: Sat, 3 Apr 2021 23:30:33 +0000 (+0000) Subject: Improved robustness to OOM conditions in the window function logic. X-Git-Tag: version-3.36.0~269 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57f90189a551638129bcaf207814859baa4af5b2;p=thirdparty%2Fsqlite.git Improved robustness to OOM conditions in the window function logic. dbsqlfuzz 0c123f7d80b29beaafc8411c12129e46f7ffdac3. FossilOrigin-Name: 35ff7cbf547d41109b7cd4217a5439b3b4a1a4c310309c572c88f596fbc1b099 --- diff --git a/manifest b/manifest index a334f7def5..b9ab3b2aa4 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Take\scare\snot\sto\schange\san\sSQLITE_NOMEM\serror\sinto\sSQLITE_SCHEMA. -D 2021-04-03T20:35:08.732 +C Improved\srobustness\sto\sOOM\sconditions\sin\sthe\swindow\sfunction\slogic.\ndbsqlfuzz\s0c123f7d80b29beaafc8411c12129e46f7ffdac3. +D 2021-04-03T23:30:33.327 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -633,7 +633,7 @@ F src/where.c f81b47aeed660808c315290aec02fefe21ffce55e988c603254a2c81d20a0eb5 F src/whereInt.h 446e5e8018f83358ef917cf32d8e6a86dc8430113d0b17e720f1839d3faa44c4 F src/wherecode.c c7354c9749f015f37bc32e15a4257a5155fa5d2b79f605f528bd09f3b9f1b4e6 F src/whereexpr.c 4ba94b8ebbff97c658b212de6ccdb6d3a41847800bdf99e7a2a967c250269f2c -F src/window.c 32b03808aff2e7263889cce0cbcb2a68efefc2a9d5187514ddb6a2a1046dc7f5 +F src/window.c 547e7a0eee7dca3f246573ca87973831c5804c2127b764835755332dea25fb4b F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/affinity2.test ce1aafc86e110685b324e9a763eab4f2a73f737842ec3b687bd965867de90627 F test/affinity3.test eecb0dabee4b7765a8465439d5e99429279ffba23ca74a7eae270a452799f9e7 @@ -1787,7 +1787,7 @@ F test/windowA.test 6d63dc1260daa17141a55007600581778523a8b420629f1282d2acfc36af F test/windowB.test 6e601f8178ba8ba28b2f19e74fe613815084bb4a8d2ad942defc7d42e191e521 F test/windowerr.tcl f5acd6fbc210d7b5546c0e879d157888455cd4a17a1d3f28f07c1c8a387019e0 F test/windowerr.test a8b752402109c15aa1c5efe1b93ccb0ce1ef84fa964ae1cd6684dd0b3cc1819b -F test/windowfault.test d543d46571b32d19f198cb04b6505747fabf3cc369970daae47074ee793612be +F test/windowfault.test 21919e601f20b976ea2a73aa401220c89ed0e8d203c4f69476ea55bce3726496 F test/windowpushd.test d8895d08870b7226f7693665bd292eb177e62ca06799184957b3ca7dc03067df F test/with1.test b231edbf0f7c1d94bc14365cd9f33e197b2f0aa16add927ee121649fce014c15 F test/with2.test 000fb95f1f29dae868cea0f41505eb5126077d49eb967ff88f9ee46212ad8863 @@ -1912,7 +1912,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 0dcf808ddf23da834da724d88b1715ed06565f1f1290713ff42a3fcf6ffb802e -R 1cf9e495012dc3b357688e52007fdf07 +P 1f66a85b7757754ff9aa0a626f66250c5fabc5fc8ab67bbc4b2ae8e6d9231a72 +R 1e7098a19e5ea3556c3efd668722aa00 U drh -Z 6b0560fcd580bcc9ef028068848073f8 +Z e3f39fba5a0b9648b23f7bff32aef6b3 diff --git a/manifest.uuid b/manifest.uuid index a6b81501f9..d494141c65 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1f66a85b7757754ff9aa0a626f66250c5fabc5fc8ab67bbc4b2ae8e6d9231a72 \ No newline at end of file +35ff7cbf547d41109b7cd4217a5439b3b4a1a4c310309c572c88f596fbc1b099 \ No newline at end of file diff --git a/src/window.c b/src/window.c index 33e905e53f..b19eb33955 100644 --- a/src/window.c +++ b/src/window.c @@ -897,9 +897,10 @@ static ExprList *exprListAppendList( int i; int nInit = pList ? pList->nExpr : 0; for(i=0; inExpr; i++){ - Expr *pDup = sqlite3ExprDup(pParse->db, pAppend->a[i].pExpr, 0); + sqlite3 *db = pParse->db; + Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0); assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) ); - if( bIntToNull && pDup ){ + if( bIntToNull && db->mallocFailed==0 ){ int iDummy; Expr *pSub; for(pSub=pDup; ExprHasProperty(pSub, EP_Skip); pSub=pSub->pLeft){ diff --git a/test/windowfault.test b/test/windowfault.test index 27c7742b30..b5d7433112 100644 --- a/test/windowfault.test +++ b/test/windowfault.test @@ -284,7 +284,7 @@ do_faultsim_test 12 -faults oom* -prep { } -body { execsql { WITH v(a, b, row_number) AS ( - SELECT a, b, row_number() OVER (PARTITION BY a ORDER BY b) FROM t1 + SELECT a, b, row_number() OVER (PARTITION BY a COLLATE nocase ORDER BY b) FROM t1 ) SELECT * FROM v WHERE a=2 }