Merged revisions 74459 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r74459 | benjamin.peterson | 2009-08-15 08:23:05 -0500 (Sat, 15 Aug 2009) | 9 lines

  Merged revisions 74457 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r74457 | benjamin.peterson | 2009-08-15 08:16:38 -0500 (Sat, 15 Aug 2009) | 1 line

    #6707 fix a crash with dir() on an uninitialized module
  ........
................
diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py
index 225e954..0e56290 100644
--- a/Lib/test/test_module.py
+++ b/Lib/test/test_module.py
@@ -11,6 +11,7 @@
         # 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 8e56852..d6000b0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@
 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 a29c31a..b2c7c14 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1265,9 +1265,11 @@
 		if (PyDict_Check(dict))
 			result = PyDict_Keys(dict);
 		else {
-			PyErr_Format(PyExc_TypeError,
-				     "%.200s.__dict__ is not a dictionary",
-				     PyModule_GetName(obj));
+			const char *name = PyModule_GetName(obj);
+			if (name)
+				PyErr_Format(PyExc_TypeError,
+					     "%.200s.__dict__ is not a dictionary",
+					     name);
 		}
 	}