Skip to content

Commit 8feeabb

Browse files
committed
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.
1 parent 543c925 commit 8feeabb

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

Objects/structseq.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
150150
}
151151

152152
res = (PyStructSequence*) PyStructSequence_New(type);
153+
if (res == NULL) {
154+
return NULL;
155+
}
153156
for (i = 0; i < len; ++i) {
154157
PyObject *v = PySequence_Fast_GET_ITEM(arg, i);
155158
Py_INCREF(v);
@@ -360,6 +363,8 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
360363
type->tp_itemsize = 0;
361364

362365
members = PyMem_NEW(PyMemberDef, n_members-n_unnamed_members+1);
366+
if (members == NULL)
367+
return;
363368

364369
for (i = k = 0; i < n_members; ++i) {
365370
if (desc->fields[i].name == PyStructSequence_UnnamedField)
@@ -387,6 +392,5 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
387392
PyInt_FromLong((long) n_members));
388393
PyDict_SetItemString(dict, unnamed_fields_key,
389394
PyInt_FromLong((long) n_unnamed_members));
390-
PyDict_SetItemString(dict, "__safe_for_unpickling__",
391-
PyInt_FromLong(1));
395+
PyDict_SetItemString(dict, "__safe_for_unpickling__", Py_True);
392396
}

0 commit comments

Comments
 (0)