Commit 8feeabb9 authored by Neal Norwitz's avatar Neal Norwitz

SF # 654974, fix unchecked return values in structseq

Check return values after memory allocation.
Also use Py_True instead of PyInt_FromLong(1) for bool value.

Backport candidate.
parent 543c9253
...@@ -150,6 +150,9 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds) ...@@ -150,6 +150,9 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
} }
res = (PyStructSequence*) PyStructSequence_New(type); res = (PyStructSequence*) PyStructSequence_New(type);
if (res == NULL) {
return NULL;
}
for (i = 0; i < len; ++i) { for (i = 0; i < len; ++i) {
PyObject *v = PySequence_Fast_GET_ITEM(arg, i); PyObject *v = PySequence_Fast_GET_ITEM(arg, i);
Py_INCREF(v); Py_INCREF(v);
...@@ -360,6 +363,8 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc) ...@@ -360,6 +363,8 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
type->tp_itemsize = 0; type->tp_itemsize = 0;
members = PyMem_NEW(PyMemberDef, n_members-n_unnamed_members+1); members = PyMem_NEW(PyMemberDef, n_members-n_unnamed_members+1);
if (members == NULL)
return;
for (i = k = 0; i < n_members; ++i) { for (i = k = 0; i < n_members; ++i) {
if (desc->fields[i].name == PyStructSequence_UnnamedField) if (desc->fields[i].name == PyStructSequence_UnnamedField)
...@@ -387,6 +392,5 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc) ...@@ -387,6 +392,5 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
PyInt_FromLong((long) n_members)); PyInt_FromLong((long) n_members));
PyDict_SetItemString(dict, unnamed_fields_key, PyDict_SetItemString(dict, unnamed_fields_key,
PyInt_FromLong((long) n_unnamed_members)); PyInt_FromLong((long) n_unnamed_members));
PyDict_SetItemString(dict, "__safe_for_unpickling__", PyDict_SetItemString(dict, "__safe_for_unpickling__", Py_True);
PyInt_FromLong(1));
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment