From ff8da0b835e94462e6b5da6fbe48409fdff40b28 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 31 May 2014 18:14:54 +0300 Subject: [PATCH] vm: Detect stack underflow in addition to overflow. --- py/vm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/py/vm.c b/py/vm.c index c04eb89547..aa7e0e2cfc 100644 --- a/py/vm.c +++ b/py/vm.c @@ -158,6 +158,13 @@ mp_vm_return_kind_t mp_execute_bytecode(const byte *code, const mp_obj_t *args, mp_vm_return_kind_t vm_return_kind = mp_execute_bytecode2(code, &ip, &state[n_state - 1], &sp, exc_stack, &exc_sp, MP_OBJ_NULL); #if DETECT_VM_STACK_OVERFLOW + if (vm_return_kind == MP_VM_RETURN_NORMAL) { + if (sp != state) { + printf("Stack misalign: %d\n", sp - state); + assert(0); + } + } + // We can't check the case when an exception is returned in state[n_state - 1] // and there are no arguments, because in this case our detection slot may have // been overwritten by the returned exception (which is allowed).