Author: georg.brandl
Date: Mon Mar 12 14:15:14 2007
New Revision: 54286

Modified:
   python/branches/p3yk/Objects/object.c
Log:
Check the keys of the locals dict -- they need not be a list.


Modified: python/branches/p3yk/Objects/object.c
==============================================================================
--- python/branches/p3yk/Objects/object.c       (original)
+++ python/branches/p3yk/Objects/object.c       Mon Mar 12 14:15:14 2007
@@ -1349,6 +1349,7 @@
 static PyObject *
 _dir_locals()
 {
+       PyObject *names;
        PyObject *locals = PyEval_GetLocals();
 
        if (locals == NULL) {
@@ -1356,8 +1357,18 @@
                return NULL;
        }
 
+       names = PyMapping_Keys(locals);
+       if (!names)
+               return NULL;
+       if (!PyList_Check(names)) {
+               PyErr_Format(PyExc_TypeError,
+                       "dir(): expected keys() of locals to be a list, "
+                       "not '%.200s'", names->ob_type->tp_name);
+               Py_DECREF(names);
+               return NULL;
+       }
        /* the locals don't need to be DECREF'd */
-       return PyMapping_Keys(locals);
+       return names;
 }
 
 /* Helper for PyObject_Dir of type objects: returns __dict__ and __bases__.
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to