diff Modules/itertoolsmodule.c @ 30239:e83575bb29da 2.3

SF bug #793826: using itertools.izip to mutate tuples Avoid Armin Rigo's dastardly exercise in re-entrancy.
author Raymond Hettinger <python@rcn.com>
date Fri, 29 Aug 2003 23:13:16 +0000
parents 45dc33433323
children 3fb3747ce304
line wrap: on
line diff
--- a/Modules/itertoolsmodule.c	Fri Aug 29 22:46:25 2003 +0000
+++ b/Modules/itertoolsmodule.c	Fri Aug 29 23:13:16 2003 +0000
@@ -1599,16 +1599,18 @@
 	PyObject *item;
 
 	if (result->ob_refcnt == 1) {
+		Py_INCREF(result);
 		for (i=0 ; i < tuplesize ; i++) {
 			it = PyTuple_GET_ITEM(lz->ittuple, i);
 			assert(PyIter_Check(it));
 			item = (*it->ob_type->tp_iternext)(it);
-			if (item == NULL)
+			if (item == NULL) {
+				Py_DECREF(result);
 				return NULL;
+			}
 			Py_DECREF(PyTuple_GET_ITEM(result, i));
 			PyTuple_SET_ITEM(result, i, item);
 		}
-		Py_INCREF(result);
 	} else {
 		result = PyTuple_New(tuplesize);
 		if (result == NULL)