* Increase test coverage.
* Have groupby() be careful about decreffing structure members.
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index bf2c493..3da0258 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -75,7 +75,7 @@
static PyObject *
groupby_next(groupbyobject *gbo)
{
- PyObject *newvalue, *newkey, *r, *grouper;
+ PyObject *newvalue, *newkey, *r, *grouper, *tmp;
/* skip to next iteration group */
for (;;) {
@@ -110,15 +110,19 @@
}
}
- Py_XDECREF(gbo->currkey);
+ tmp = gbo->currkey;
gbo->currkey = newkey;
- Py_XDECREF(gbo->currvalue);
+ Py_XDECREF(tmp);
+
+ tmp = gbo->currvalue;
gbo->currvalue = newvalue;
+ Py_XDECREF(tmp);
}
- Py_XDECREF(gbo->tgtkey);
- gbo->tgtkey = gbo->currkey;
Py_INCREF(gbo->currkey);
+ tmp = gbo->tgtkey;
+ gbo->tgtkey = gbo->currkey;
+ Py_XDECREF(tmp);
grouper = _grouper_create(gbo, gbo->tgtkey);
if (grouper == NULL)