Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a segfault that can occur in the RowSet object following a malloc failure. (CVS 5978) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
cb0f1658d3db7ccf80843d66fa85af8d |
User & Date: | drh 2008-12-04 22:17:56.000 |
Context
2008-12-05
| ||
00:00 | Expand table.* properly on a USING or a NATURAL join. Ticket #3522. (CVS 5979) (check-in: 06d206ef7d user: drh tags: trunk) | |
2008-12-04
| ||
22:17 | Fix a segfault that can occur in the RowSet object following a malloc failure. (CVS 5978) (check-in: cb0f1658d3 user: drh tags: trunk) | |
20:40 | Replace the VDBE Fifo object with the new RowSet object. (CVS 5977) (check-in: 39a0750b49 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** ** $Id: vdbe.c,v 1.791 2008/12/04 22:17:56 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> #include "vdbeInt.h" /* ** The following global variable is incremented every time a cursor |
︙ | ︙ | |||
4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 | assert( pOp->p1>0 && pOp->p1<=p->nMem ); pIdx = &p->aMem[pOp->p1]; assert( pOp->p2>0 && pOp->p2<=p->nMem ); pVal = &p->aMem[pOp->p2]; assert( (pVal->flags & MEM_Int)!=0 ); if( (pIdx->flags & MEM_RowSet)==0 ){ sqlite3VdbeMemSetRowSet(pIdx); } sqlite3RowSetInsert(pIdx->u.pRowSet, pVal->u.i); break; } /* Opcode: RowSetRead P1 P2 P3 * * ** | > | 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 | assert( pOp->p1>0 && pOp->p1<=p->nMem ); pIdx = &p->aMem[pOp->p1]; assert( pOp->p2>0 && pOp->p2<=p->nMem ); pVal = &p->aMem[pOp->p2]; assert( (pVal->flags & MEM_Int)!=0 ); if( (pIdx->flags & MEM_RowSet)==0 ){ sqlite3VdbeMemSetRowSet(pIdx); if( (pIdx->flags & MEM_RowSet)==0 ) goto no_mem; } sqlite3RowSetInsert(pIdx->u.pRowSet, pVal->u.i); break; } /* Opcode: RowSetRead P1 P2 P3 * * ** |
︙ | ︙ |
Changes to src/vdbemem.c.
︙ | ︙ | |||
11 12 13 14 15 16 17 | ************************************************************************* ** ** This file contains code use to manipulate "Mem" structure. A "Mem" ** stores a single value in the VDBE. Mem is an opaque structure visible ** only within the VDBE. Interface routines refer to a Mem using the ** name sqlite_value ** | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ************************************************************************* ** ** This file contains code use to manipulate "Mem" structure. A "Mem" ** stores a single value in the VDBE. Mem is an opaque structure visible ** only within the VDBE. Interface routines refer to a Mem using the ** name sqlite_value ** ** $Id: vdbemem.c,v 1.128 2008/12/04 22:17:56 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> #include "vdbeInt.h" /* ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*) |
︙ | ︙ | |||
506 507 508 509 510 511 512 | assert( db!=0 ); if( pMem->flags & MEM_RowSet ){ sqlite3RowSetClear(pMem->u.pRowSet); }else{ sqlite3VdbeMemRelease(pMem); pMem->zMalloc = sqlite3DbMallocRaw(db, 32); } | | > > | | 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 | assert( db!=0 ); if( pMem->flags & MEM_RowSet ){ sqlite3RowSetClear(pMem->u.pRowSet); }else{ sqlite3VdbeMemRelease(pMem); pMem->zMalloc = sqlite3DbMallocRaw(db, 32); } if( db->mallocFailed ){ pMem->flags = MEM_Null; }else{ assert( pMem->zMalloc ); pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, sqlite3DbMallocSize(db, pMem->zMalloc)); assert( pMem->u.pRowSet!=0 ); pMem->flags = MEM_RowSet; } } /* ** Return true if the Mem object contains a TEXT or BLOB that is ** too large - whose size exceeds SQLITE_MAX_LENGTH. */ |
︙ | ︙ |