]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a crash that can occur after a malloc failure. Ticket #2775. (CVS 4547)
authordanielk1977 <danielk1977@noemail.net>
Fri, 16 Nov 2007 14:55:46 +0000 (14:55 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Fri, 16 Nov 2007 14:55:46 +0000 (14:55 +0000)
FossilOrigin-Name: c91bc8d33306881cb2501070dccced92c82cf165

manifest
manifest.uuid
src/trigger.c
test/malloc.test

index 5611dd668cc659cb669f7bf83d5e809cade6d121..41c0e9438e5a4006a1de83687a6fbf5478e2168e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Don't\sdo\sanything\swhen\sinput\sdoclists\sare\sboth\sempty.\s\sTicket\s#2774\s(CVS\s4546)
-D 2007-11-16T00:23:08
+C Fix\sa\scrash\sthat\scan\soccur\safter\sa\smalloc\sfailure.\sTicket\s#2775.\s(CVS\s4547)
+D 2007-11-16T14:55:46
 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
 F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -161,7 +161,7 @@ F src/test_server.c a6ece6c835e7eae835054124e09e947e422b1ac5
 F src/test_tclvar.c b2d1115e4d489179d3f029e765211b2ad527ba59
 F src/test_thread.c a98d69cae883e53d3686fc25889a5fa5f51439f8
 F src/tokenize.c 67e42600ab34f976f2b1288c499ad6c98d652f0e
-F src/trigger.c 724a77d54609a33bde90618934fbeddfcc729a10
+F src/trigger.c 66695e1375b969ea41a38dec9f40ea28bb0ac767
 F src/update.c 2add92a6159fa73128653706574afbcd8fd1dd80
 F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
 F src/util.c 05f31144bbd3f1a24f4139ae029c42545cb72624
@@ -353,7 +353,7 @@ F test/lock2.test 5f9557b775662c2a5ee435378f39e10d64f65cb3
 F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
 F test/lock4.test f358fa835dff485d462072eee991111f09e87441
 F test/main.test 05f585bb70c05caac3e047903b517cbb319ed204
-F test/malloc.test 16ee55742216e3d0fdadb695fb90ad229f46b32c
+F test/malloc.test 93fca57780e221192c74e51c59c4291768f33897
 F test/malloc2.test 850471731efad72af5a7748e366a371933ff0b64
 F test/malloc3.test 3d690cbd66c93a3d41606ed8cfcbe1c9853e9d83
 F test/malloc4.test f0e5e0f639f61e2776a6c3f5308f836b3ad8b3c7
@@ -587,7 +587,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 3bfee76fa6191c6e3aaa4632949b53253c612f36
-R 71e33fb18b19046ee138d1704767511a
-U shess
-Z 2e4be0fc57c5fedb87f3cd5c96e1d006
+P 75cb46f82a6a95dbe9e279dede299bafa2e91cae
+R db6e8cd2b0253bfa9f1838461fb83598
+U danielk1977
+Z 8aaad7de19e849e912adf927a02f955d
index 6aac4014a197aee7eb6205fd4eff46da6a95a919..5c0bb120181849bb5e14e3ff268f773bf7b8e3c3 100644 (file)
@@ -1 +1 @@
-75cb46f82a6a95dbe9e279dede299bafa2e91cae
\ No newline at end of file
+c91bc8d33306881cb2501070dccced92c82cf165
\ No newline at end of file
index 252dd7b46d8473bfa6724121844946aee2a87c96..efcf8124491c25e6209cfb937176597c291867ad 100644 (file)
@@ -773,12 +773,13 @@ int sqlite3CodeRowTrigger(
 
   for(p=pTab->pTrigger; p; p=p->pNext){
     int fire_this = 0;
+    sqlite3 *db = pParse->db;
 
     /* Determine whether we should code this trigger */
     if( 
       p->op==op && 
       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))
     ){
       TriggerStack *pS;      /* Pointer to trigger-stack entry */
@@ -816,8 +817,8 @@ int sqlite3CodeRowTrigger(
 
       /* code the WHEN clause */
       endTrigger = sqlite3VdbeMakeLabel(pParse->pVdbe);
-      whenExpr = sqlite3ExprDup(pParse->db, p->pWhen);
-      if( sqlite3ExprResolveNames(&sNC, whenExpr) ){
+      whenExpr = sqlite3ExprDup(db, p->pWhen);
+      if( db->mallocFailed || sqlite3ExprResolveNames(&sNC, whenExpr) ){
         pParse->trigStack = trigStackEntry.pNext;
         sqlite3ExprDelete(whenExpr);
         return 1;
index e99854f41948898df04e3a22c1a0de34c09617cd..fbef0df7f9039ce00618715577b62322a9b81a1c 100644 (file)
@@ -16,7 +16,7 @@
 # to see what happens in the library if a malloc were to really fail
 # 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]
 source $testdir/tester.tcl
@@ -144,7 +144,7 @@ ifcapable trigger {
     BEGIN TRANSACTION;
     CREATE TABLE t1(a,b);
     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) SELECT * FROM t2;
       INSERT INTO t2 SELECT * FROM t2;