From 25a9bccdee2fe830046c1c1a0220ca7706597202 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Fri, 20 Sep 2019 09:16:34 +0200 Subject: py/compile: Disallow 'import *' outside module level. This check follows CPython's behaviour, because 'import *' always populates the globals with the imported names, not locals. Since it's safe to do this (doesn't lead to a crash or undefined behaviour) the check is only enabled for MICROPY_CPYTHON_COMPAT. Fixes issue #5121. --- py/compile.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'py') diff --git a/py/compile.c b/py/compile.c index 90d1bfd13..62b0f3938 100644 --- a/py/compile.c +++ b/py/compile.c @@ -1196,6 +1196,13 @@ STATIC void compile_import_from(compiler_t *comp, mp_parse_node_struct_t *pns) { } while (0); if (MP_PARSE_NODE_IS_TOKEN_KIND(pns->nodes[1], MP_TOKEN_OP_STAR)) { + #if MICROPY_CPYTHON_COMPAT + if (comp->scope_cur->kind != SCOPE_MODULE) { + compile_syntax_error(comp, (mp_parse_node_t)pns, "import * not at module level"); + return; + } + #endif + EMIT_ARG(load_const_small_int, import_level); // build the "fromlist" tuple -- cgit v1.2.3