diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-12 23:36:55 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-12 23:36:55 (GMT) |
commit | a40d57366432cd65915b92fe3e6bfe1d5ad63be0 (patch) | |
tree | 45ef11eae7d47a373fea86cba4b1b0c4902bb93a /Objects/object.c | |
parent | f94d7fa5fb90df0163cffca2864885a7da49d4f6 (diff) | |
download | cpython-a40d57366432cd65915b92fe3e6bfe1d5ad63be0.zip cpython-a40d57366432cd65915b92fe3e6bfe1d5ad63be0.tar.gz cpython-a40d57366432cd65915b92fe3e6bfe1d5ad63be0.tar.bz2 |
#3720: Interpreter crashes when an evil iterator removes its own next function.
Now the slot is filled with a function that always raises.
Will not backport: extensions compiled with 2.6.x would not run on 2.6.0.
Diffstat (limited to 'Objects/object.c')
-rw-r--r-- | Objects/object.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c index 1e0db4a..ba736a9 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1305,6 +1305,20 @@ PyObject_SelfIter(PyObject *obj) return obj; } +/* Helper used when the __next__ method is removed from a type: + tp_iternext is never NULL and can be safely called without checking + on every iteration. + */ + +PyObject * +_PyObject_NextNotImplemented(PyObject *self) +{ + PyErr_Format(PyExc_TypeError, + "'%.200s' object is not iterable", + Py_TYPE(self)->tp_name); + return NULL; +} + /* Generic GetAttr functions - put these in your tp_[gs]etattro slot */ PyObject * |