diff options
| author | Raymond Hettinger <python@rcn.com> | 2003-08-29 23:13:16 (GMT) |
|---|---|---|
| committer | Raymond Hettinger <python@rcn.com> | 2003-08-29 23:13:16 (GMT) |
| commit | 2e61662290944ddeda0462ff33db4a571dbfb7c8 (patch) | |
| tree | 91de29d54f0bd72c1576b34982b05f43877fcedf /Modules | |
| parent | aa4fef593c29f9ef0c2b2c4690ef9bc3d9dde32d (diff) | |
| download | cpython-2e61662290944ddeda0462ff33db4a571dbfb7c8.zip cpython-2e61662290944ddeda0462ff33db4a571dbfb7c8.tar.gz cpython-2e61662290944ddeda0462ff33db4a571dbfb7c8.tar.bz2 | |
SF bug #793826: using itertools.izip to mutate tuples
Avoid Armin Rigo's dastardly exercise in re-entrancy.
Diffstat (limited to 'Modules')
| -rw-r--r-- | Modules/itertoolsmodule.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c index e63d02a..4f49fef 100644 --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1599,16 +1599,18 @@ izip_next(izipobject *lz) 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) |
