mirror of
https://github.com/python/cpython.git
synced 2025-09-10 02:36:56 +00:00
SF bug #494668: PUSH() should assert-fail on overflow.
eval_frame(): Added asserts to the top of the eval loop, to verify that the eval stack pointer is in bounds, plus some comments.
This commit is contained in:
parent
81b61bdc1a
commit
b6d14daa1c
1 changed files with 4 additions and 2 deletions
|
@ -497,7 +497,7 @@ eval_frame(PyFrameObject *f)
|
||||||
#ifdef DXPAIRS
|
#ifdef DXPAIRS
|
||||||
int lastopcode = 0;
|
int lastopcode = 0;
|
||||||
#endif
|
#endif
|
||||||
PyObject **stack_pointer;
|
PyObject **stack_pointer; /* Next free slot in value stack */
|
||||||
register unsigned char *next_instr;
|
register unsigned char *next_instr;
|
||||||
register int opcode=0; /* Current opcode */
|
register int opcode=0; /* Current opcode */
|
||||||
register int oparg=0; /* Current opcode argument, if any */
|
register int oparg=0; /* Current opcode argument, if any */
|
||||||
|
@ -586,7 +586,7 @@ eval_frame(PyFrameObject *f)
|
||||||
next_instr = first_instr + f->f_lasti;
|
next_instr = first_instr + f->f_lasti;
|
||||||
stack_pointer = f->f_stacktop;
|
stack_pointer = f->f_stacktop;
|
||||||
assert(stack_pointer != NULL);
|
assert(stack_pointer != NULL);
|
||||||
f->f_stacktop = NULL;
|
f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
|
||||||
|
|
||||||
if (tstate->use_tracing) {
|
if (tstate->use_tracing) {
|
||||||
if (tstate->c_tracefunc != NULL) {
|
if (tstate->c_tracefunc != NULL) {
|
||||||
|
@ -634,6 +634,8 @@ eval_frame(PyFrameObject *f)
|
||||||
w = NULL;
|
w = NULL;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
assert(stack_pointer >= f->f_valuestack); /* else underflow */
|
||||||
|
assert(STACK_LEVEL() <= f->f_stacksize); /* else overflow */
|
||||||
/* Do periodic things. Doing this every time through
|
/* Do periodic things. Doing this every time through
|
||||||
the loop would add too much overhead, so we do it
|
the loop would add too much overhead, so we do it
|
||||||
only every Nth instruction. We also do it if
|
only every Nth instruction. We also do it if
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue