]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improved robustness to OOM conditions in the window function logic.
authordrh <>
Sat, 3 Apr 2021 23:30:33 +0000 (23:30 +0000)
committerdrh <>
Sat, 3 Apr 2021 23:30:33 +0000 (23:30 +0000)
dbsqlfuzz 0c123f7d80b29beaafc8411c12129e46f7ffdac3.

FossilOrigin-Name: 35ff7cbf547d41109b7cd4217a5439b3b4a1a4c310309c572c88f596fbc1b099

manifest
manifest.uuid
src/window.c
test/windowfault.test

index a334f7def5e4ac1572b871b05f30d69640a7a542..b9ab3b2aa4449dd6c8352643aaa1dd4bc44ae0c5 100644 (file)
--- 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
index a6b81501f9ab995e15ab5273f6c496fdbfcdf47a..d494141c6517aaad6bb7f7bdf5cf8ebab8284518 100644 (file)
@@ -1 +1 @@
-1f66a85b7757754ff9aa0a626f66250c5fabc5fc8ab67bbc4b2ae8e6d9231a72
\ No newline at end of file
+35ff7cbf547d41109b7cd4217a5439b3b4a1a4c310309c572c88f596fbc1b099
\ No newline at end of file
index 33e905e53fb8982f93eb54e93858c394ad76f5f0..b19eb339553478c682edc351c2b21f42503f27b7 100644 (file)
@@ -897,9 +897,10 @@ static ExprList *exprListAppendList(
     int i;
     int nInit = pList ? pList->nExpr : 0;
     for(i=0; i<pAppend->nExpr; 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){
index 27c7742b30e3a825acdb8569e2db4c764ef59438..b5d7433112c51405facf5e33e99b8aa67c359b5b 100644 (file)
@@ -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
   }