From 08242eed2677cde806fd9c0de33138a8491293a2 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
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 43a13156f..c3873e0b6 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
-- 
GitLab