Commit bf00bc78 authored by Eric Snow's avatar Eric Snow

Issue #15578: Correctly incref the parent module while importing.

parent 280bc223
......@@ -397,6 +397,24 @@ class ImportTests(unittest.TestCase):
finally:
sys.path.pop(0)
def test_replace_parent_in_sys_modules(self):
dir_name = os.path.abspath(TESTFN)
os.mkdir(dir_name)
try:
pkg_dir = os.path.join(dir_name, 'sa')
os.mkdir(pkg_dir)
with open(os.path.join(pkg_dir, '__init__.py'), 'w') as init_file:
init_file.write("import v1")
with open(os.path.join(pkg_dir, 'v1.py'), 'w') as v1_file:
v1_file.write("import sys;"
"sys.modules['sa'] = sys.modules[__name__];"
"import sa")
sys.path.insert(0, dir_name)
# a segfault means the test failed!
import sa
finally:
rmtree(dir_name)
class PycRewritingTests(unittest.TestCase):
# Test that the `co_filename` attribute on code objects always points
......
......@@ -7082,6 +7082,8 @@ Core and Builtins
- Add Py3k warnings for parameter names in parentheses.
- Issue #15578: Correctly incref the parent module while importing.
- Issue #7362: Give a proper error message for ``def f((x)=3): pass``.
- Issue #7085: Fix crash when importing some extensions in a thread on MacOSX
......
......@@ -2243,8 +2243,10 @@ import_module_level(char *name, PyObject *globals, PyObject *locals,
if (parent == NULL)
goto error_exit;
Py_INCREF(parent);
head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
&buflen);
Py_DECREF(parent);
if (head == NULL)
goto error_exit;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment