summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2013-04-29 13:08:14 (GMT)
committerBenjamin Peterson <benjamin@python.org>2013-04-29 13:08:14 (GMT)
commit7d110042c5a2b27ffd0b3ae25dc7722f2f8bc5c5 (patch)
tree564d77b977a6af962a1be77073327466c42ecd59
parent775ccdf1fc87922f8fe0d46a3e8cd5f0a6a54218 (diff)
downloadcpython-7d110042c5a2b27ffd0b3ae25dc7722f2f8bc5c5.zip
cpython-7d110042c5a2b27ffd0b3ae25dc7722f2f8bc5c5.tar.gz
cpython-7d110042c5a2b27ffd0b3ae25dc7722f2f8bc5c5.tar.bz2
raise an ImportError (rather than fatal) when __import__ is not found in __builtins__ (closes #17867)
-rw-r--r--Lib/test/test_import.py7
-rw-r--r--Misc/NEWS2
-rw-r--r--Python/import.c3
3 files changed, 11 insertions, 1 deletions
diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index 470a6d2..8be66a1 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -324,6 +324,13 @@ class ImportTests(unittest.TestCase):
except ImportError:
self.fail("fromlist must allow bogus names")
+ @cpython_only
+ def test_delete_builtins_import(self):
+ args = ["-c", "del __builtins__.__import__; import os"]
+ popen = script_helper.spawn_python(*args)
+ stdout, stderr = popen.communicate()
+ self.assertIn(b"ImportError", stdout)
+
@skip_if_dont_write_bytecode
class FilePermissionTests(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
index 6e6ee2c..eced97a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 3.3.2?
Core and Builtins
-----------------
+- Issue #17867: Raise an ImportError if __import__ is not found in __builtins__.
+
- Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
such as was shipped with Centos 5 and Mac OS X 10.4.
diff --git a/Python/import.c b/Python/import.c
index 5fc2523..26261e1 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1389,7 +1389,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals,
if (builtins_import == NULL) {
builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__);
if (builtins_import == NULL) {
- Py_FatalError("__import__ missing");
+ PyErr_SetString(PyExc_ImportError, "__import__ not found");
+ goto error_with_unlock;
}
}
Py_INCREF(builtins_import);