From: drh Date: Sat, 6 Jun 2009 15:17:27 +0000 (+0000) Subject: Make sure the result of sqlite3VdbeGetOp() is not used as an array following X-Git-Tag: version-3.6.15~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=125feffc897d19b68bfa934f6077ec4534bf0ed4;p=thirdparty%2Fsqlite.git Make sure the result of sqlite3VdbeGetOp() is not used as an array following an OOM error, since after (6691) it might be a single-entry dummy opcode. (CVS 6724) FossilOrigin-Name: 127b13981960a9690de09e8f9d0b38a4bd76015f --- diff --git a/manifest b/manifest index 7668a3f844..6ec0e1d49a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C When\sbuilding\sin\sdebug\smode\swith\sgcc,\sforce\sthe\snullMem\svariable\sin\sfunction\scolumnMem()\sto\sbe\saligned\sto\san\s8-byte\sboundary.\sOtherwise\san\sassert()\sstatement\smay\sfail.\s(CVS\s6723) -D 2009-06-06T14:13:27 +C Make\ssure\sthe\sresult\sof\ssqlite3VdbeGetOp()\sis\snot\sused\sas\san\sarray\sfollowing\nan\sOOM\serror,\ssince\safter\s(6691)\sit\smight\sbe\sa\ssingle-entry\sdummy\sopcode.\s(CVS\s6724) +D 2009-06-06T15:17:28 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 8b8fb7823264331210cddf103831816c286ba446 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -212,7 +212,7 @@ F src/vdbeblob.c c25d7e7bc6d5917feeb17270bd275fa771f26e5c F src/vdbemem.c 05183d46094aa99b8f8350e5761b9369dbef35a8 F src/vtab.c e2f4c92df7d06330b151448718c4724742ff444b F src/walker.c ec4b9742a4077ef80346e2f9aaf0f44c2d95087a -F src/where.c 706e9f2fbb422f58bf6c6542b62eed2055794942 +F src/where.c c6dda6e349e83de5da471704841791ecacaf87ca F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 14165b3e32715b700b5f0cbf8f6e3833dda0be45 @@ -733,7 +733,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746 -P 3ae4880bee3a0312c61cdd36f4fa50286cc2ef48 -R 7fafa9b9c2ade168b25ec9e70190e435 -U danielk1977 -Z 310a5ca4b45740577b9f82dfb2f7878d +P 3fd6c72da599347af70897b30b86a4ba641d4cd9 +R cb43d9b720bcd9297992edbfe1e179da +U drh +Z c27bf9ffa6ccdcf0d37dcb5ecf60c7c6 diff --git a/manifest.uuid b/manifest.uuid index d11b5cb421..0ea3f8bc5e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3fd6c72da599347af70897b30b86a4ba641d4cd9 \ No newline at end of file +127b13981960a9690de09e8f9d0b38a4bd76015f \ No newline at end of file diff --git a/src/where.c b/src/where.c index d0f0b01d6c..0fe0df06e4 100644 --- a/src/where.c +++ b/src/where.c @@ -16,7 +16,7 @@ ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** -** $Id: where.c,v 1.400 2009/06/03 01:24:54 drh Exp $ +** $Id: where.c,v 1.401 2009/06/06 15:17:28 drh Exp $ */ #include "sqliteInt.h" @@ -3551,7 +3551,7 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){ ** that reference the table and converts them into opcodes that ** reference the index. */ - if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){ + if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){ int k, j, last; VdbeOp *pOp; Index *pIdx = pLevel->plan.u.pIdx;