diff options
author | Jeff Epler <jepler@gmail.com> | 2018-04-01 12:15:35 -0500 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2018-04-10 14:06:26 +1000 |
commit | cbf981f3307661c205d27f3a418be3989ab47c5e (patch) | |
tree | 2f0b9ca9a977bf74f75fd99719aba0794acb98b1 /py/objgenerator.c | |
parent | 6a693db71d032518dedc50731376c15bebe6cec9 (diff) |
py/objgenerator: Check stack before resuming a generator.
This turns a hard crash in a recursive generator into a 'maximum recursion
depth exceeded' exception.
Diffstat (limited to 'py/objgenerator.c')
-rw-r--r-- | py/objgenerator.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/py/objgenerator.c b/py/objgenerator.c index 8c1260b60..5fd13f831 100644 --- a/py/objgenerator.c +++ b/py/objgenerator.c @@ -32,6 +32,7 @@ #include "py/bc.h" #include "py/objgenerator.h" #include "py/objfun.h" +#include "py/stackctrl.h" /******************************************************************************/ /* generator wrapper */ @@ -92,6 +93,7 @@ STATIC void gen_instance_print(const mp_print_t *print, mp_obj_t self_in, mp_pri } mp_vm_return_kind_t mp_obj_gen_resume(mp_obj_t self_in, mp_obj_t send_value, mp_obj_t throw_value, mp_obj_t *ret_val) { + MP_STACK_CHECK(); mp_check_self(MP_OBJ_IS_TYPE(self_in, &mp_type_gen_instance)); mp_obj_gen_instance_t *self = MP_OBJ_TO_PTR(self_in); if (self->code_state.ip == 0) { |