mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Fix a crash that can occur after a malloc failure. Ticket #2775. (CVS 4547)
FossilOrigin-Name: c91bc8d33306881cb2501070dccced92c82cf165
This commit is contained in:
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Don't\sdo\sanything\swhen\sinput\sdoclists\sare\sboth\sempty.\s\sTicket\s#2774\s(CVS\s4546)
|
C Fix\sa\scrash\sthat\scan\soccur\safter\sa\smalloc\sfailure.\sTicket\s#2775.\s(CVS\s4547)
|
||||||
D 2007-11-16T00:23:08
|
D 2007-11-16T14:55:46
|
||||||
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
|
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
|
||||||
F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8
|
F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@ -161,7 +161,7 @@ F src/test_server.c a6ece6c835e7eae835054124e09e947e422b1ac5
|
|||||||
F src/test_tclvar.c b2d1115e4d489179d3f029e765211b2ad527ba59
|
F src/test_tclvar.c b2d1115e4d489179d3f029e765211b2ad527ba59
|
||||||
F src/test_thread.c a98d69cae883e53d3686fc25889a5fa5f51439f8
|
F src/test_thread.c a98d69cae883e53d3686fc25889a5fa5f51439f8
|
||||||
F src/tokenize.c 67e42600ab34f976f2b1288c499ad6c98d652f0e
|
F src/tokenize.c 67e42600ab34f976f2b1288c499ad6c98d652f0e
|
||||||
F src/trigger.c 724a77d54609a33bde90618934fbeddfcc729a10
|
F src/trigger.c 66695e1375b969ea41a38dec9f40ea28bb0ac767
|
||||||
F src/update.c 2add92a6159fa73128653706574afbcd8fd1dd80
|
F src/update.c 2add92a6159fa73128653706574afbcd8fd1dd80
|
||||||
F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
|
F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
|
||||||
F src/util.c 05f31144bbd3f1a24f4139ae029c42545cb72624
|
F src/util.c 05f31144bbd3f1a24f4139ae029c42545cb72624
|
||||||
@ -353,7 +353,7 @@ F test/lock2.test 5f9557b775662c2a5ee435378f39e10d64f65cb3
|
|||||||
F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
|
F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
|
||||||
F test/lock4.test f358fa835dff485d462072eee991111f09e87441
|
F test/lock4.test f358fa835dff485d462072eee991111f09e87441
|
||||||
F test/main.test 05f585bb70c05caac3e047903b517cbb319ed204
|
F test/main.test 05f585bb70c05caac3e047903b517cbb319ed204
|
||||||
F test/malloc.test 16ee55742216e3d0fdadb695fb90ad229f46b32c
|
F test/malloc.test 93fca57780e221192c74e51c59c4291768f33897
|
||||||
F test/malloc2.test 850471731efad72af5a7748e366a371933ff0b64
|
F test/malloc2.test 850471731efad72af5a7748e366a371933ff0b64
|
||||||
F test/malloc3.test 3d690cbd66c93a3d41606ed8cfcbe1c9853e9d83
|
F test/malloc3.test 3d690cbd66c93a3d41606ed8cfcbe1c9853e9d83
|
||||||
F test/malloc4.test f0e5e0f639f61e2776a6c3f5308f836b3ad8b3c7
|
F test/malloc4.test f0e5e0f639f61e2776a6c3f5308f836b3ad8b3c7
|
||||||
@ -587,7 +587,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
||||||
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
||||||
P 3bfee76fa6191c6e3aaa4632949b53253c612f36
|
P 75cb46f82a6a95dbe9e279dede299bafa2e91cae
|
||||||
R 71e33fb18b19046ee138d1704767511a
|
R db6e8cd2b0253bfa9f1838461fb83598
|
||||||
U shess
|
U danielk1977
|
||||||
Z 2e4be0fc57c5fedb87f3cd5c96e1d006
|
Z 8aaad7de19e849e912adf927a02f955d
|
||||||
|
@ -1 +1 @@
|
|||||||
75cb46f82a6a95dbe9e279dede299bafa2e91cae
|
c91bc8d33306881cb2501070dccced92c82cf165
|
@ -773,12 +773,13 @@ int sqlite3CodeRowTrigger(
|
|||||||
|
|
||||||
for(p=pTab->pTrigger; p; p=p->pNext){
|
for(p=pTab->pTrigger; p; p=p->pNext){
|
||||||
int fire_this = 0;
|
int fire_this = 0;
|
||||||
|
sqlite3 *db = pParse->db;
|
||||||
|
|
||||||
/* Determine whether we should code this trigger */
|
/* Determine whether we should code this trigger */
|
||||||
if(
|
if(
|
||||||
p->op==op &&
|
p->op==op &&
|
||||||
p->tr_tm==tr_tm &&
|
p->tr_tm==tr_tm &&
|
||||||
(p->pSchema==p->pTabSchema || p->pSchema==pParse->db->aDb[1].pSchema) &&
|
(p->pSchema==p->pTabSchema || p->pSchema==db->aDb[1].pSchema) &&
|
||||||
(op!=TK_UPDATE||!p->pColumns||checkColumnOverLap(p->pColumns,pChanges))
|
(op!=TK_UPDATE||!p->pColumns||checkColumnOverLap(p->pColumns,pChanges))
|
||||||
){
|
){
|
||||||
TriggerStack *pS; /* Pointer to trigger-stack entry */
|
TriggerStack *pS; /* Pointer to trigger-stack entry */
|
||||||
@ -816,8 +817,8 @@ int sqlite3CodeRowTrigger(
|
|||||||
|
|
||||||
/* code the WHEN clause */
|
/* code the WHEN clause */
|
||||||
endTrigger = sqlite3VdbeMakeLabel(pParse->pVdbe);
|
endTrigger = sqlite3VdbeMakeLabel(pParse->pVdbe);
|
||||||
whenExpr = sqlite3ExprDup(pParse->db, p->pWhen);
|
whenExpr = sqlite3ExprDup(db, p->pWhen);
|
||||||
if( sqlite3ExprResolveNames(&sNC, whenExpr) ){
|
if( db->mallocFailed || sqlite3ExprResolveNames(&sNC, whenExpr) ){
|
||||||
pParse->trigStack = trigStackEntry.pNext;
|
pParse->trigStack = trigStackEntry.pNext;
|
||||||
sqlite3ExprDelete(whenExpr);
|
sqlite3ExprDelete(whenExpr);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
# to see what happens in the library if a malloc were to really fail
|
# to see what happens in the library if a malloc were to really fail
|
||||||
# due to an out-of-memory situation.
|
# due to an out-of-memory situation.
|
||||||
#
|
#
|
||||||
# $Id: malloc.test,v 1.51 2007/10/09 08:29:33 danielk1977 Exp $
|
# $Id: malloc.test,v 1.52 2007/11/16 14:55:46 danielk1977 Exp $
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
@ -144,7 +144,7 @@ ifcapable trigger {
|
|||||||
BEGIN TRANSACTION;
|
BEGIN TRANSACTION;
|
||||||
CREATE TABLE t1(a,b);
|
CREATE TABLE t1(a,b);
|
||||||
CREATE TABLE t2(x,y);
|
CREATE TABLE t2(x,y);
|
||||||
CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN
|
CREATE TRIGGER r1 AFTER INSERT ON t1 WHEN new.a = 2 BEGIN
|
||||||
INSERT INTO t2(x,y) VALUES(new.rowid,1);
|
INSERT INTO t2(x,y) VALUES(new.rowid,1);
|
||||||
INSERT INTO t2(x,y) SELECT * FROM t2;
|
INSERT INTO t2(x,y) SELECT * FROM t2;
|
||||||
INSERT INTO t2 SELECT * FROM t2;
|
INSERT INTO t2 SELECT * FROM t2;
|
||||||
|
Reference in New Issue
Block a user