1
0
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:
danielk1977
2007-11-16 14:55:46 +00:00
parent cd7274ceb0
commit 932083c60f
4 changed files with 15 additions and 14 deletions

View File

@ -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

View File

@ -1 +1 @@
75cb46f82a6a95dbe9e279dede299bafa2e91cae c91bc8d33306881cb2501070dccced92c82cf165

View File

@ -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;

View File

@ -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;