-C Fix\stest\snumbering\sin\stkt2822.test.\sTicket\s#2830.\s(CVS\s4611)
-D 2007-12-12T04:38:27
+C Add\sa\snew\sOP_StackDepth\sopcode\sto\shelp\sdetect\sVDBE\sstack\sleaks\searly,\r\nbefore\sthey\scause\sdamage.\s\sFor\sdiagnostics\sin\sticket\s#2832.\s(CVS\s4612)
+D 2007-12-12T12:00:46
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 0590398f62fc2c456ff4c45e9741f5a718b7e2ac
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/test_thread.c a98d69cae883e53d3686fc25889a5fa5f51439f8
F src/tokenize.c 67e42600ab34f976f2b1288c499ad6c98d652f0e
F src/trigger.c 66695e1375b969ea41a38dec9f40ea28bb0ac767
-F src/update.c 2add92a6159fa73128653706574afbcd8fd1dd80
+F src/update.c 3725377d6226f6a1f15885e112435df3a5e4770d
F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
F src/util.c 05f31144bbd3f1a24f4139ae029c42545cb72624
F src/vacuum.c 25ffbd766f25bca099ead1c1e11f5528c86102b8
-F src/vdbe.c a99beac1162fa490c4b75ac36ed97146ab181837
+F src/vdbe.c 24376fd0c28a52ebb410292a2261e5174d862cc0
F src/vdbe.h 79e09ff13b85457abe437d9814454534ebbc1fe3
F src/vdbeInt.h 630145b9bfaa19190ab491f52658a7db550f2247
F src/vdbeapi.c dd2c43317294e0a013e9f634ee4209a3ea459b43
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 9335c940504f5979066b70ec445b57acfb251713
-R d03a5445f8be128fa7f48f15551925f2
-U danielk1977
-Z bf201abd015205614969c923308ec87e
+P 8fe8e9c460e0f8ebc4267de96b0c971cb6370861
+R 6bd8f89e70a38f2a5c36552ce2b40f8f
+U drh
+Z 14e8caa139e0c85a2dd57b679935e880
-8fe8e9c460e0f8ebc4267de96b0c971cb6370861
\ No newline at end of file
+3fd6a267533cedcca9b8ba3533c107d7341a06c6
\ No newline at end of file
** This file contains C code routines that are called by the parser
** to handle UPDATE statements.
**
-** $Id: update.c,v 1.141 2007/11/11 18:36:34 drh Exp $
+** $Id: update.c,v 1.142 2007/12/12 12:00:46 drh Exp $
*/
#include "sqliteInt.h"
/* The top of the update loop for when there are triggers.
*/
addr = sqlite3VdbeAddOp(v, OP_FifoRead, 0, 0);
+ sqlite3VdbeAddOp(v, OP_StackDepth, -1, 0);
mem1 = pParse->nMem++;
sqlite3VdbeAddOp(v, OP_MemStore, mem1, 0);
*/
if( !triggers_exist ){
addr = sqlite3VdbeAddOp(v, OP_FifoRead, 0, 0);
+ sqlite3VdbeAddOp(v, OP_StackDepth, -1, 0);
sqlite3VdbeAddOp(v, OP_Dup, 0, 0);
}
sqlite3VdbeAddOp(v, OP_NotExists, iCur, addr);
** 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.656 2007/12/04 16:54:53 drh Exp $
+** $Id: vdbe.c,v 1.657 2007/12/12 12:00:46 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
goto vdbe_return;
}
+/* Opcode: StackDepth P1 * *
+**
+** If P1 is less than zero, then store the current stack depth
+** in P1. If P1 is zero or greater, verify that the current stack
+** depth is equal to P1 and throw an exception if it is not.
+**
+** This opcode is used for internal consistency checking.
+*/
+case OP_StackDepth: { /* no-push */
+ if( pOp->p1<0 ){
+ pOp->p1 = pTos - p->aStack + 1;
+ }else if( pOp->p1!=pTos - p->aStack + 1 ){
+ p->pTos = pTos;
+ p->rc = SQLITE_ERROR;
+ p->pc = pc;
+ p->errorAction = OE_Rollback;
+ sqlite3SetString(&p->zErrMsg, "internal VDBE stack overflow", (char*)0);
+ goto vdbe_return;
+ }
+ break;
+}
+
/* Opcode: Integer P1 * *
**
** The 32-bit integer value P1 is pushed onto the stack.