Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change the PopStack() routine so that it doesn't confuse bounds checkers. Ticket #222. (CVS 825) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
fc11fa50b8f39f5e0b3674d7df832ffb |
User & Date: | drh 2003-01-12 17:28:19.000 |
Context
2003-01-12
| ||
17:35 | Remove an unused variable from the VDBE. Ticket #223. (CVS 826) (check-in: 0deaf563fd user: drh tags: trunk) | |
17:28 | Change the PopStack() routine so that it doesn't confuse bounds checkers. Ticket #222. (CVS 825) (check-in: fc11fa50b8 user: drh tags: trunk) | |
2003-01-11
| ||
15:02 | Remove the aOrder() array from where.c. (CVS 824) (check-in: b2c1edb47f user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
32 33 34 35 36 37 38 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** 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.196 2003/01/12 17:28:19 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> /* ** The makefile scans this source file and creates the following ** array of string constants which are the names of all VDBE opcodes. |
︙ | ︙ | |||
922 923 924 925 926 927 928 | } /* ** Pop the stack N times. Free any memory associated with the ** popped stack elements. */ static void PopStack(Vdbe *p, int N){ | | < | < < | | | | | < > | | | 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 | } /* ** Pop the stack N times. Free any memory associated with the ** popped stack elements. */ static void PopStack(Vdbe *p, int N){ assert( N>=0 ); if( p->zStack==0 ) return; assert( p->aStack ); while( N-- > 0 ){ if( p->aStack[p->tos].flags & STK_Dyn ){ sqliteFree(p->zStack[p->tos]); } p->aStack[p->tos].flags = 0; p->zStack[p->tos] = 0; p->tos--; } } /* ** Here is a macro to handle the common case of popping the stack ** once. This macro only works from within the sqliteVdbeExec() ** function. */ #define POPSTACK \ assert(p->tos>=0); \ if( aStack[p->tos].flags & STK_Dyn ) sqliteFree(zStack[p->tos]); \ p->tos--; /* ** Return TRUE if zNum is a floating-point or integer number. */ static int isNumber(const char *zNum){ if( *zNum=='-' || *zNum=='+' ) zNum++; if( !isdigit(*zNum) ) return 0; |
︙ | ︙ | |||
1392 1393 1394 1395 1396 1397 1398 | char zBuf[100]; /* Space to sprintf() an integer */ int returnStack[100]; /* Return address stack for OP_Gosub & OP_Return */ int returnDepth = 0; /* Next unused element in returnStack[] */ #ifdef VDBE_PROFILE unsigned long long start; int origPc; #endif | < | 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 | char zBuf[100]; /* Space to sprintf() an integer */ int returnStack[100]; /* Return address stack for OP_Gosub & OP_Return */ int returnDepth = 0; /* Next unused element in returnStack[] */ #ifdef VDBE_PROFILE unsigned long long start; int origPc; #endif /* No instruction ever pushes more than a single element onto the ** stack. And the stack never grows on successive executions of the ** same loop. So the total number of instructions is an upper bound ** on the maximum stack depth required. ** ** Allocation all the stack space we will ever need. |
︙ | ︙ |