Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | When an OOM error occurs while resizing an sqlite_value object, make sure the value of the object is set to NULL. Ticket #3488. (CVS 5877) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
7b9c9b35fffb233e76148182426199d5 |
User & Date: | drh 2008-11-11 00:21:30.000 |
Context
2008-11-11
| ||
00:30 | Fix the CLI so that it does not terminate input when an Oracle or MS-SQL command terminator mark is seen in the middle of a string literal. Ticket #3490. (CVS 5878) (check-in: 68662e3b48 user: drh tags: trunk) | |
00:21 | When an OOM error occurs while resizing an sqlite_value object, make sure the value of the object is set to NULL. Ticket #3488. (CVS 5877) (check-in: 7b9c9b35ff user: drh tags: trunk) | |
2008-11-10
| ||
23:54 | Fix the documentation of the SQLITE_FUNCTION authorizer code so that it agrees with how SQLite has always behaved. Ticket #3489. (CVS 5876) (check-in: 806b6ed202 user: drh tags: trunk) | |
Changes
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.126 2008/11/11 00:21:30 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> #include "vdbeInt.h" /* ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*) |
︙ | ︙ | |||
82 83 84 85 86 87 88 | ((pMem->flags&MEM_Static) ? 1 : 0) ); if( n<32 ) n = 32; if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){ if( preserve && pMem->z==pMem->zMalloc ){ pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); | < < < > > > | > | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | ((pMem->flags&MEM_Static) ? 1 : 0) ); if( n<32 ) n = 32; if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){ if( preserve && pMem->z==pMem->zMalloc ){ pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); preserve = 0; }else{ sqlite3DbFree(pMem->db, pMem->zMalloc); pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); } } if( preserve && pMem->z && pMem->zMalloc && pMem->z!=pMem->zMalloc ){ memcpy(pMem->zMalloc, pMem->z, pMem->n); } if( pMem->flags&MEM_Dyn && pMem->xDel ){ pMem->xDel((void *)(pMem->z)); } pMem->z = pMem->zMalloc; if( pMem->z==0 ){ pMem->flags = MEM_Null; }else{ pMem->flags &= ~(MEM_Ephem|MEM_Static); } pMem->xDel = 0; return (pMem->z ? SQLITE_OK : SQLITE_NOMEM); } /* ** Make the given Mem object MEM_Dyn. In other words, make it so ** that any TEXT or BLOB content is stored in memory obtained from |
︙ | ︙ |
Changes to test/mallocJ.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # # This test script checks malloc failures in LIMIT operations for # UPDATE/DELETE statements. # | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # May you share freely, never taking more than you give. # #*********************************************************************** # # This test script checks malloc failures in LIMIT operations for # UPDATE/DELETE statements. # # $Id: mallocJ.test,v 1.4 2008/11/11 00:21:30 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/malloc_common.tcl ifcapable {update_delete_limit} { |
︙ | ︙ | |||
35 36 37 38 39 40 41 | DELETE FROM t1 WHERE x=1 ORDER BY y LIMIT 2 OFFSET 2; DELETE FROM t1 ORDER BY y LIMIT 2 OFFSET 2; } } # ticket #3467 | | > | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | DELETE FROM t1 WHERE x=1 ORDER BY y LIMIT 2 OFFSET 2; DELETE FROM t1 ORDER BY y LIMIT 2 OFFSET 2; } } # ticket #3467 do_malloc_test mallocJ-2 -start 114 -sqlprep { CREATE TABLE t1(a,b); INSERT INTO t1 VALUES(1,2); PRAGMA vdbe_trace=ON; } -sqlbody { SELECT a, b, 'abc' FROM t1 UNION SELECT b, a, 'xyz' FROM t1 ORDER BY 2, 3; } # ticket #3478 do_malloc_test mallocJ-3 -sqlbody { EXPLAIN COMMIT } finish_test |