From: Andrew M. Kuchling Date: Tue, 3 Oct 2006 19:22:30 +0000 (+0000) Subject: [Backport r50782 | neal.norwitz] X-Git-Tag: v2.4.4c1~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c45e5d9d91b40d2bd71990530f3aaec1534f23f8;p=thirdparty%2FPython%2Fcpython.git [Backport r50782 | neal.norwitz] nextlink can be NULL if teedataobject_new fails, so use XINCREF. Ensure that dataobj is never NULL. Reported by Klocwork #102 --- diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index 39af2ea931ed..97a6858c479f 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -356,7 +356,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; } @@ -432,7 +432,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; } @@ -478,6 +478,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; done: