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.
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 @@
PyObject *
PySequence_Fast(PyObject *v, const char *m)
{
+ PyObject *it;
+
if (v == NULL)
return null_error();
@@ -1504,9 +1506,15 @@
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;
}