diff options
author | Damien George <damien.p.george@gmail.com> | 2017-01-08 20:17:23 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2017-01-08 20:17:23 +1100 |
commit | b528e9a428f92241d2cf3bb30f78b0d65e1a8428 (patch) | |
tree | 29925eef4b895a92d4b3f8828b479a3b69072b5b /py/builtinimport.c | |
parent | b2611d6be305c94359f67df875786858e05c3eb0 (diff) |
py/builtinimport: Fix bug when importing names from frozen packages.
The commit d9047d3c8a99603884db25076c37778f50633ca6 introduced a bug
whereby "from a.b import c" stopped working for frozen packages. This is
because the path was not properly truncated and became "a//b". Such a
path resolves correctly for a "real" filesystem, but not for a search in
the list of frozen modules.
Diffstat (limited to 'py/builtinimport.c')
-rw-r--r-- | py/builtinimport.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/py/builtinimport.c b/py/builtinimport.c index 342bad079..4024c5d59 100644 --- a/py/builtinimport.c +++ b/py/builtinimport.c @@ -466,15 +466,15 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) { // https://docs.python.org/3/reference/import.html // "Specifically, any module that contains a __path__ attribute is considered a package." mp_store_attr(module_obj, MP_QSTR___path__, mp_obj_new_str(vstr_str(&path), vstr_len(&path), false)); + size_t orig_path_len = path.len; vstr_add_char(&path, PATH_SEP_CHAR); vstr_add_str(&path, "__init__.py"); if (stat_file_py_or_mpy(&path) != MP_IMPORT_STAT_FILE) { - vstr_cut_tail_bytes(&path, sizeof("/__init__.py") - 1); // cut off /__init__.py //mp_warning("%s is imported as namespace package", vstr_str(&path)); } else { do_load(module_obj, &path); - vstr_cut_tail_bytes(&path, sizeof("/__init__.py") - 1); // cut off /__init__.py } + path.len = orig_path_len; } else { // MP_IMPORT_STAT_FILE do_load(module_obj, &path); // TODO: We cannot just break here, at the very least, we must execute |