From 273323cf68e8d55c67622412ecf531e359a54e11 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Tue, 17 Apr 2012 19:05:11 -0400 Subject: Issue #14592: A relative import will raise a KeyError if __package__ or __name__ are not set in globals. Thanks to Stefan Behnel for the bug report. --- Lib/importlib/test/import_/test_relative_imports.py | 5 +++++ Misc/NEWS | 3 +++ Python/import.c | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Lib/importlib/test/import_/test_relative_imports.py b/Lib/importlib/test/import_/test_relative_imports.py index 5b4e23c..4569c26 100644 --- a/Lib/importlib/test/import_/test_relative_imports.py +++ b/Lib/importlib/test/import_/test_relative_imports.py @@ -203,6 +203,11 @@ class RelativeImports(unittest.TestCase): self.assertEqual(mod.__name__, 'crash.mod') self.relative_import_test(create, globals_, callback) + def test_relative_import_no_globals(self): + # No globals for a relative import is an error. + with self.assertRaises(KeyError): + import_util.import_('sys', level=1) + def test_main(): from test.support import run_unittest diff --git a/Misc/NEWS b/Misc/NEWS index f1837e7..9f0009f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.3.0 Alpha 3? Core and Builtins ----------------- +- Issue #14592: Attempting a relative import w/o __package__ or __name__ set in + globals raises a KeyError. + - Issue #10854: The ImportError raised when an extension module on Windows fails to import now uses the new path and name attributes from Issue #1559549. diff --git a/Python/import.c b/Python/import.c index f3de7d8..3e620b3 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2355,8 +2355,9 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } } else { - package = _PyDict_GetItemIdWithError(globals, &PyId___name__); + package = _PyDict_GetItemId(globals, &PyId___name__); if (package == NULL) { + PyErr_SetString(PyExc_KeyError, "'__name__' not in globals"); goto error; } else if (!PyUnicode_Check(package)) { -- cgit v0.12