diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-12 23:58:21 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2009-01-12 23:58:21 (GMT) |
commit | f343e01c170b3f63eafac4568d905be91b676254 (patch) | |
tree | 1c3aa5615718e7ccc70be59a5fbd72b7497869ae /Include | |
parent | e5e298f8755c475e78f8cfc71ee0ea03c6674406 (diff) | |
download | cpython-f343e01c170b3f63eafac4568d905be91b676254.zip cpython-f343e01c170b3f63eafac4568d905be91b676254.tar.gz cpython-f343e01c170b3f63eafac4568d905be91b676254.tar.bz2 |
Merged revisions 68560 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68560 | amaury.forgeotdarc | 2009-01-13 00:36:55 +0100 (mar., 13 janv. 2009) | 6 lines
#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 'Include')
-rw-r--r-- | Include/abstract.h | 3 | ||||
-rw-r--r-- | Include/object.h | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/Include/abstract.h b/Include/abstract.h index 4fb16d0..b953308 100644 --- a/Include/abstract.h +++ b/Include/abstract.h @@ -612,7 +612,8 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ is an iterator, this returns itself. */ #define PyIter_Check(obj) \ - ((obj)->ob_type->tp_iternext != NULL) + ((obj)->ob_type->tp_iternext != NULL && \ + (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented) PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *); /* Takes an iterator object and calls its tp_iternext slot, diff --git a/Include/object.h b/Include/object.h index 0d20ecc..f3fdbda 100644 --- a/Include/object.h +++ b/Include/object.h @@ -438,6 +438,7 @@ PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); +PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *); |