diff options
author | Raymond Hettinger <python@rcn.com> | 2004-08-07 04:55:30 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-08-07 04:55:30 (GMT) |
commit | 2a7dedef9e3d94fbbad3782fd4757c6b7ba91c09 (patch) | |
tree | e2cd6d966dc61970931cc346c799031592ba7096 | |
parent | 61992efc4bb413ae7a19752215eca5af09be6b6d (diff) | |
download | cpython-2a7dedef9e3d94fbbad3782fd4757c6b7ba91c09.zip cpython-2a7dedef9e3d94fbbad3782fd4757c6b7ba91c09.tar.gz cpython-2a7dedef9e3d94fbbad3782fd4757c6b7ba91c09.tar.bz2 |
SF bug #1004669: Type returned from .keys() is not checked
-rw-r--r-- | Lib/test/test_builtin.py | 9 | ||||
-rw-r--r-- | Objects/object.c | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 6654f56..bc5afdc 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -322,6 +322,15 @@ class BuiltinTest(unittest.TestCase): ss['a3'] = 'a2*7' self.assertEqual(ss['a3'], 210) + # Verify that dir() catches a non-list returned by eval + # SF bug #1004669 + class C: + def __getitem__(self, item): + raise KeyError(item) + def keys(self): + return 'a' + self.assertRaises(TypeError, eval, 'dir()', globals(), C()) + # Done outside of the method test_z to get the correct scope z = 0 f = open(TESTFN, 'w') diff --git a/Objects/object.c b/Objects/object.c index 470da60..d8e403b 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1702,6 +1702,11 @@ PyObject_Dir(PyObject *arg) } assert(result); + if (!PyList_Check(result)) { + PyErr_SetString(PyExc_TypeError, + "Expected keys() to be a list."); + goto error; + } if (PyList_Sort(result) != 0) goto error; else |