Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Abandon the OR optimization following a memory allocation failure, to avoid referencing uninitialized memory. (CVS 4872) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9d2afbb543e1493e1d9c2eb4329143bc |
User & Date: | drh 2008-03-17 17:08:33.000 |
Context
2008-03-17
| ||
17:18 | Fix an uninitialized variable in the Prev and Next opcodes. (CVS 4873) (check-in: fcf3d0a3d5 user: drh tags: trunk) | |
17:08 | Abandon the OR optimization following a memory allocation failure, to avoid referencing uninitialized memory. (CVS 4872) (check-in: 9d2afbb543 user: drh tags: trunk) | |
16:54 | Detect the failure to zero-terminate a result string due to a malloc failure. (CVS 4871) (check-in: 57db14067f user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
12 13 14 15 16 17 18 | ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. This module is reponsible for ** generating the code that loops through a table looking for applicable ** rows. Indices are selected and used to speed the search when doing ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ** This module contains C code that generates VDBE code used to process ** the WHERE clause of SQL statements. This module is reponsible for ** generating the code that loops through a table looking for applicable ** rows. Indices are selected and used to speed the search when doing ** 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.290 2008/03/17 17:08:33 drh Exp $ */ #include "sqliteInt.h" /* ** The number of bits in a Bitmask. "BMS" means "BitMask Size". */ #define BMS (sizeof(Bitmask)*8) |
︙ | ︙ | |||
834 835 836 837 838 839 840 841 842 843 844 845 846 847 | assert( (pTerm->flags & TERM_DYNAMIC)==0 ); whereClauseInit(&sOr, pWC->pParse, pMaskSet); whereSplit(&sOr, pExpr, TK_OR); exprAnalyzeAll(pSrc, &sOr); assert( sOr.nTerm>=2 ); j = 0; do{ assert( j<sOr.nTerm ); iColumn = sOr.a[j].leftColumn; iCursor = sOr.a[j].leftCursor; ok = iCursor>=0; for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){ if( pOrTerm->eOperator!=WO_EQ ){ | > | 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 | assert( (pTerm->flags & TERM_DYNAMIC)==0 ); whereClauseInit(&sOr, pWC->pParse, pMaskSet); whereSplit(&sOr, pExpr, TK_OR); exprAnalyzeAll(pSrc, &sOr); assert( sOr.nTerm>=2 ); j = 0; if( db->mallocFailed ) goto or_not_possible; do{ assert( j<sOr.nTerm ); iColumn = sOr.a[j].leftColumn; iCursor = sOr.a[j].leftCursor; ok = iCursor>=0; for(i=sOr.nTerm-1, pOrTerm=sOr.a; i>=0 && ok; i--, pOrTerm++){ if( pOrTerm->eOperator!=WO_EQ ){ |
︙ | ︙ |