mirror of https://github.com/python/cpython
nextlink can be NULL if teedataobject_new fails, so use XINCREF.
Ensure that dataobj is never NULL. Reported by Klocwork #102
This commit is contained in:
parent
98a96004f9
commit
9029b5f289
|
@ -357,7 +357,7 @@ teedataobject_jumplink(teedataobject *tdo)
|
|||
{
|
||||
if (tdo->nextlink == NULL)
|
||||
tdo->nextlink = teedataobject_new(tdo->it);
|
||||
Py_INCREF(tdo->nextlink);
|
||||
Py_XINCREF(tdo->nextlink);
|
||||
return tdo->nextlink;
|
||||
}
|
||||
|
||||
|
@ -468,7 +468,7 @@ tee_next(teeobject *to)
|
|||
|
||||
if (to->index >= LINKCELLS) {
|
||||
link = teedataobject_jumplink(to->dataobj);
|
||||
Py_XDECREF(to->dataobj);
|
||||
Py_DECREF(to->dataobj);
|
||||
to->dataobj = (teedataobject *)link;
|
||||
to->index = 0;
|
||||
}
|
||||
|
@ -522,6 +522,12 @@ tee_fromiterable(PyObject *iterable)
|
|||
if (to == NULL)
|
||||
goto done;
|
||||
to->dataobj = (teedataobject *)teedataobject_new(it);
|
||||
if (!to->dataobj) {
|
||||
PyObject_GC_Del(to);
|
||||
to = NULL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
to->index = 0;
|
||||
to->weakreflist = NULL;
|
||||
PyObject_GC_Track(to);
|
||||
|
|
Loading…
Reference in New Issue