From 08242eed2677cde806fd9c0de33138a8491293a2 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 12 Apr 2017 13:50:31 +1000 Subject: [PATCH] py/nlrsetjmp: Add check for failed NLR jump. Also optimise the function so it only needs to call the MP_STATE_THREAD macro once (following how other nlr code is written). --- py/nlrsetjmp.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/py/nlrsetjmp.c b/py/nlrsetjmp.c index 43a13156f2..c3873e0b6d 100644 --- a/py/nlrsetjmp.c +++ b/py/nlrsetjmp.c @@ -29,10 +29,14 @@ #if MICROPY_NLR_SETJMP void nlr_setjmp_jump(void *val) { - nlr_buf_t *buf = MP_STATE_THREAD(nlr_top); - MP_STATE_THREAD(nlr_top) = buf->prev; - buf->ret_val = val; - longjmp(buf->jmpbuf, 1); + nlr_buf_t **top_ptr = &MP_STATE_THREAD(nlr_top); + nlr_buf_t *top = *top_ptr; + if (top == NULL) { + nlr_jump_fail(val); + } + top->ret_val = val; + *top_ptr = top->prev; + longjmp(top->jmpbuf, 1); } #endif