PyTuple_Pack can fail and return NULL. If this happens, then PyType_FromSpecWithBases will incorrectly create a new type without bases. Also, it will crash on the Py_DECREF that follows. Also free members and type in error conditions.
spec.slots = slots;
bases = PyTuple_Pack(1, &PyTuple_Type);
+ if (bases == NULL) {
+ PyMem_FREE(members);
+ return NULL;
+ }
type = (PyTypeObject *)PyType_FromSpecWithBases(&spec, bases);
Py_DECREF(bases);
PyMem_FREE(members);
if (initialize_structseq_dict(
desc, type->tp_dict, n_members, n_unnamed_members) < 0) {
+ Py_DECREF(type);
return NULL;
}