From: dan Date: Thu, 7 Mar 2013 11:03:51 +0000 (+0000) Subject: Avoid an assertion fault and/or freeing memory while it is still in use when X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=92d9f1b6b354ae7e58199e725fbe3d6f64b0b6d3;p=thirdparty%2Fsqlite.git Avoid an assertion fault and/or freeing memory while it is still in use when an error occurs during virtual table construction. Cherrypick of [a02599ad85d]. FossilOrigin-Name: 760072ceea294fd7d168de28de9e775e545ef30e --- diff --git a/manifest b/manifest index a7e15030a2..6ffc8bb361 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Backport\sVSIX\stooling\sand\spackaging\sfixes\sand\senhancements. -D 2012-12-07T04:46:53.606 +C Avoid\san\sassertion\sfault\sand/or\sfreeing\smemory\swhile\sit\sis\sstill\sin\suse\swhen\nan\serror\soccurs\sduring\svirtual\stable\sconstruction.\sCherrypick\sof\s[a02599ad85d]. +D 2013-03-07T11:03:51.343 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in abd5c10d21d1395f140d9e50ea999df8fa4d6376 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -247,7 +247,7 @@ F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb F src/vdbemem.c cb55e84b8e2c15704968ee05f0fae25883299b74 F src/vdbesort.c 0dc1b274dcb4d4c8e71b0b2b15261f286caba39b F src/vdbetrace.c 8bd5da325fc90f28464335e4cc4ad1407fe30835 -F src/vtab.c bf61d2b47fbe544cf128f176d950a95ab9fa7990 +F src/vtab.c 940ea10c126f6e288725e80bb173f606670430f3 F src/wal.c 5acb3e7bbd31f10ba39acad9ce6b399055337a9d F src/wal.h 29c197540b19044e6cd73487017e5e47a1d3dac6 F src/walker.c 3d75ba73de15e0f8cd0737643badbeb0e002f07b @@ -1015,7 +1015,7 @@ F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac -P 325364a984e9a5c0825810bf50f57e026ff3b8dd -R b6cebc4c5e41527b0959f9cee96db5b7 -U mistachkin -Z b5160dec06b175ffc06bc0e43cb2677f +P e890bcde34370079f4da011da39e4ba8224ffab4 +R 3aee953b86407273366f5f75f4c5ca92 +U dan +Z 1435144ed9b3c053d9bb36c7383b5519 diff --git a/manifest.uuid b/manifest.uuid index e0693b7ddf..46ed048293 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e890bcde34370079f4da011da39e4ba8224ffab4 \ No newline at end of file +760072ceea294fd7d168de28de9e775e545ef30e \ No newline at end of file diff --git a/src/vtab.c b/src/vtab.c index 6219f8b0ba..259613019d 100644 --- a/src/vtab.c +++ b/src/vtab.c @@ -263,9 +263,8 @@ void sqlite3VtabClear(sqlite3 *db, Table *p){ if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); if( p->azModuleArg ){ int i; - assert( p->nModuleArg<2 || p->azModuleArg[1]==0 ); for(i=0; inModuleArg; i++){ - sqlite3DbFree(db, p->azModuleArg[i]); + if( i!=1 ) sqlite3DbFree(db, p->azModuleArg[i]); } sqlite3DbFree(db, p->azModuleArg); }