diff options
author | Raymond Hettinger <python@rcn.com> | 2004-01-11 23:26:51 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-01-11 23:26:51 (GMT) |
commit | 2fb702966c9c7e29c2697cf0d9dc6b1a19e465d7 (patch) | |
tree | 827a5a5ab76ab4c4b4b12f487bb2f8974f3aa6a7 /Objects/abstract.c | |
parent | 44a98237d875737515364299672293360e6c7ef6 (diff) | |
download | cpython-2fb702966c9c7e29c2697cf0d9dc6b1a19e465d7.zip cpython-2fb702966c9c7e29c2697cf0d9dc6b1a19e465d7.tar.gz cpython-2fb702966c9c7e29c2697cf0d9dc6b1a19e465d7.tar.bz2 |
SF Patch #871704: Py_SequenceFast can mask errors
(Contributed by Greg Chapman.)
Since this only changes the error message, I doubt that it should be
backported.
Diffstat (limited to 'Objects/abstract.c')
-rw-r--r-- | Objects/abstract.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index 342d971..4ac9260 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1496,6 +1496,8 @@ PySequence_List(PyObject *v) PyObject * PySequence_Fast(PyObject *v, const char *m) { + PyObject *it; + if (v == NULL) return null_error(); @@ -1504,9 +1506,15 @@ PySequence_Fast(PyObject *v, const char *m) return v; } - v = PySequence_Tuple(v); - if (v == NULL && PyErr_ExceptionMatches(PyExc_TypeError)) - return type_error(m); + it = PyObject_GetIter(v); + if (it == NULL) { + if (PyErr_ExceptionMatches(PyExc_TypeError)) + return type_error(m); + return NULL; + } + + v = PySequence_Tuple(it); + Py_DECREF(it); return v; } |