py/objgenerator: Check stack before resuming a generator.

This turns a hard crash in a recursive generator into a 'maximum recursion
depth exceeded' exception.
This commit is contained in:
Jeff Epler
2018-04-01 12:15:35 -05:00
committed by Damien George
parent 6a693db71d
commit cbf981f330
3 changed files with 12 additions and 0 deletions

View File

@@ -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) {