From fe2bc92b4d20c116fbb14b6fe92db459d8ce2126 Mon Sep 17 00:00:00 2001 From: Mike Wadsten Date: Mon, 13 Jan 2020 11:51:04 -0600 Subject: [PATCH] py/runtime: Fix crash when exc __new__ doesn't return an exc instance. See CPython bug https://bugs.python.org/issue39091 for more details. --- py/runtime.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/py/runtime.c b/py/runtime.c index 0133d813f..27e77fc29 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -1372,8 +1372,10 @@ mp_obj_t mp_make_raise_obj(mp_obj_t o) { // create and return a new exception instance by calling o // TODO could have an option to disable traceback, then builtin exceptions (eg TypeError) // could have const instances in ROM which we return here instead - return mp_call_function_n_kw(o, 0, 0, NULL); - } else if (mp_obj_is_exception_instance(o)) { + o = mp_call_function_n_kw(o, 0, 0, NULL); + } + + if (mp_obj_is_exception_instance(o)) { // o is an instance of an exception, so use it as the exception return o; } else {