Fix __import__("") to raise ValueError rather than return None.

This commit is contained in:
Thomas Wouters 2006-04-04 16:17:02 +00:00
parent 06853fc150
commit 8ddab27182
2 changed files with 11 additions and 1 deletions

View File

@ -108,6 +108,7 @@ class BuiltinTest(unittest.TestCase):
__import__('string') __import__('string')
self.assertRaises(ImportError, __import__, 'spamspam') self.assertRaises(ImportError, __import__, 'spamspam')
self.assertRaises(TypeError, __import__, 1, 2, 3, 4) self.assertRaises(TypeError, __import__, 1, 2, 3, 4)
self.assertRaises(ValueError, __import__, '')
def test_abs(self): def test_abs(self):
# int # int

View File

@ -1934,6 +1934,14 @@ import_module_level(char *name, PyObject *globals, PyObject *locals,
} }
tail = next; tail = next;
} }
if (tail == Py_None) {
/* If tail is Py_None, both get_parent and load_next found
an empty module name: someone called __import__("") or
doctored faulty bytecode */
PyErr_SetString(PyExc_ValueError,
"Empty module name");
return NULL;
}
if (fromlist != NULL) { if (fromlist != NULL) {
if (fromlist == Py_None || !PyObject_IsTrue(fromlist)) if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
@ -2094,7 +2102,8 @@ load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
PyObject *result; PyObject *result;
if (strlen(name) == 0) { if (strlen(name) == 0) {
/* empty module name only happens in 'from . import' */ /* completely empty module name should only happen in
'from . import' (or '__import__("")')*/
Py_INCREF(mod); Py_INCREF(mod);
*p_name = NULL; *p_name = NULL;
return mod; return mod;