From: dan Date: Wed, 13 Jun 2018 11:11:13 +0000 (+0000) Subject: Check that malloc() has not already failed when invoking the xUpdate() method X-Git-Tag: version-3.25.0~187 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=466ea9b1e20d38b1893612707bc0470316c4e56c;p=thirdparty%2Fsqlite.git Check that malloc() has not already failed when invoking the xUpdate() method of a virtual table implementation. This fixes an assert() failure in FTS5 that could occur following an OOM condition. FossilOrigin-Name: e9a7e4d58f3716991309ca0e3f080717e473c7c231685954aceee36172f19cf2 --- diff --git a/manifest b/manifest index f89b5ce859..a23bb3a5a5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sunused\sSQLITE_CANTOPEN_DIRTYWAL\sresult\scode.\s\sThis\scode\swas\sused\nin\ssome\shistorical\sversions\son\sthe\sapple-osx\sbranch\sbut\swas\sremoved\nby\scheck-in\s[27e20d699872b2b8].\s\sRestore\sit\sso\sthat\sold\scode\sthat\sactually\nreferences\sthat\sresult\scode\swill\sstill\scompile. -D 2018-06-13T02:20:34.202 +C Check\sthat\smalloc()\shas\snot\salready\sfailed\swhen\sinvoking\sthe\sxUpdate()\smethod\nof\sa\svirtual\stable\simplementation.\sThis\sfixes\san\sassert()\sfailure\sin\sFTS5\sthat\ncould\soccur\sfollowing\san\sOOM\scondition. +D 2018-06-13T11:11:13.092 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in bfc40f350586923e0419d2ea4b559c37ec10ee4b6e210e08c14401f8e340f0da @@ -565,7 +565,7 @@ F src/upsert.c 47edd408cc73f8d3c00a140550d1ad180b407c146285947969dd09874802bf88 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c d9eb0a6c4aae1b00a7369eadd7ca0bbe946cb4c953b6751aa20d357c2f482157 F src/vacuum.c 36e7d21a20c0bf6ef4ef7c399d192b5239410b7c4d3c1070fba4e30810d0b855 -F src/vdbe.c 7509cbdad75624ed397e581210db27cb2c99882a40cd1c3c2948641220a14a48 +F src/vdbe.c f1bf4e51bcbea0f63174bee5da822d112970a547c06bf6cfb45f77fe6ebd6541 F src/vdbe.h 9c8c245fa3785266c269ab02c135c836ff49a307612186686bcdae500f409945 F src/vdbeInt.h 4531c172f8a51f90e3dcb8f49531ab64b17ad3aef85d19a6e8c925c2ddf59c66 F src/vdbeapi.c af4a3de00d1851bcbc55b85dfbe52849aa2b1e17b4a5a1f3d9c257df7af361ff @@ -1173,7 +1173,7 @@ F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8 F test/regexp1.test 497ea812f264d12b6198d6e50a76be4a1973a9d8 F test/regexp2.test 40e894223b3d6672655481493f1be12012f2b33c F test/reindex.test 44edd3966b474468b823d481eafef0c305022254 -F test/releasetest.tcl 5f15ab8056799e9a6e26a310d49236d2e774d6a30d0ec74601e18d4ce146b79c x +F test/releasetest.tcl 769892f81050b3f59c66f274d478d855159b474ea27019dec82f1215c0b91ef7 x F test/resetdb.test 2107b34a8c437183f48eb833905df43818160a55f4ac69bbaf54f356fb2b27bd F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/rollback.test 06680159bc6746d0f26276e339e3ae2f951c64812468308838e0a3362d911eaa @@ -1731,7 +1731,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 858fc52b237702b5e0381eebf5c158bffd7371ff0053a8583b8c175f8f691c82 -R 6ceedb097c0849604ae5e518ced6ab8b -U drh -Z cf184defe88fa33ab23b824c945dcab2 +P 9f40383eed936a6921ef8dc94775eb55d03a761f36eda7be1b9cdd0a0d30fa80 +R 4bafe6447638b15993b3f38fe7f8476f +U dan +Z 8be96dc0a0ca0b6fd2e41a312298600e diff --git a/manifest.uuid b/manifest.uuid index 4f58cf42e5..e5613edab7 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9f40383eed936a6921ef8dc94775eb55d03a761f36eda7be1b9cdd0a0d30fa80 \ No newline at end of file +e9a7e4d58f3716991309ca0e3f080717e473c7c231685954aceee36172f19cf2 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 6cdfadb563..823b034815 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -6999,6 +6999,7 @@ case OP_VUpdate: { || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace ); assert( p->readOnly==0 ); + if( db->mallocFailed ) goto no_mem; sqlite3VdbeIncrWriteCounter(p, 0); pVtab = pOp->p4.pVtab->pVtab; if( pVtab==0 || NEVER(pVtab->pModule==0) ){ diff --git a/test/releasetest.tcl b/test/releasetest.tcl index 01a0795bfa..65f6dadad9 100755 --- a/test/releasetest.tcl +++ b/test/releasetest.tcl @@ -127,6 +127,7 @@ array set ::Configs [strip_comments { -DSQLITE_ENABLE_HIDDEN_COLUMNS -DSQLITE_MAX_ATTACHED=125 -DSQLITE_MUTATION_TEST + --enable-fts5 --enable-json1 } "Fast-One" { -O6