summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2009-08-15 13:16:38 (GMT)
committerBenjamin Peterson <benjamin@python.org>2009-08-15 13:16:38 (GMT)
commit4c6e8088f52c4a1d33ff529685512fd6ebe0d21a (patch)
tree26fd508689ec6c19187d4ef63534a8990acd3902
parent75e1f9985aee7b52812140776120e82c103e7e9a (diff)
downloadcpython-4c6e8088f52c4a1d33ff529685512fd6ebe0d21a.zip
cpython-4c6e8088f52c4a1d33ff529685512fd6ebe0d21a.tar.gz
cpython-4c6e8088f52c4a1d33ff529685512fd6ebe0d21a.tar.bz2
#6707 fix a crash with dir() on an uninitialized module
-rw-r--r--Lib/test/test_module.py1
-rw-r--r--Misc/NEWS2
-rw-r--r--Objects/object.c8
3 files changed, 8 insertions, 3 deletions
diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py
index 5bc33d4..80d440d 100644
--- a/Lib/test/test_module.py
+++ b/Lib/test/test_module.py
@@ -11,6 +11,7 @@ class ModuleTests(unittest.TestCase):
# and __doc__ is None
foo = ModuleType.__new__(ModuleType)
self.assertTrue(foo.__dict__ is None)
+ self.assertRaises(SystemError, dir, foo)
try:
s = foo.__name__
self.fail("__name__ = %s" % repr(s))
diff --git a/Misc/NEWS b/Misc/NEWS
index 44db52c..5c467aa 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.7 alpha 1
Core and Builtins
-----------------
+- Issue #6707: dir() on an uninitialized module caused a crash.
+
- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters.
- Issue #6573: set.union() stopped processing inputs if an instance of self
diff --git a/Objects/object.c b/Objects/object.c
index 0191ebe..3c7facb 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1810,9 +1810,11 @@ _specialized_dir_module(PyObject *obj)
if (PyDict_Check(dict))
result = PyDict_Keys(dict);
else {
- PyErr_Format(PyExc_TypeError,
- "%.200s.__dict__ is not a dictionary",
- PyModule_GetName(obj));
+ char *name = PyModule_GetName(obj);
+ if (name)
+ PyErr_Format(PyExc_TypeError,
+ "%.200s.__dict__ is not a dictionary",
+ name);
}
}