diff --git "a/.\\Python-3.5.0rc1/Modules/itertoolsmodule.c" "b/.\\Python-3.5.0rc1/Modules/itertoolsmodule.c" index ac31e2f..44dd52c 100644 --- "a/.\\Python-3.5.0rc1/Modules/itertoolsmodule.c" +++ "b/.\\Python-3.5.0rc1/Modules/itertoolsmodule.c" @@ -2238,11 +2238,9 @@ product_setstate(productobject *lz, PyObject *state) Py_ssize_t index = PyLong_AsSsize_t(indexObject); if (index < 0 && PyErr_Occurred()) return NULL; /* not an integer */ - /* clamp the index */ + /* clamp the index lower bound */ if (index < 0) index = 0; - else if (index > n-1) - index = n-1; lz->indices[i] = index; } @@ -2250,8 +2248,17 @@ product_setstate(productobject *lz, PyObject *state) if (!result) return NULL; for (i=0; ipools, i); - PyObject *element = PyTuple_GET_ITEM(pool, lz->indices[i]); + PyObject *pool, *element; + Py_ssize_t poolSize, poolIndex; + pool = PyTuple_GET_ITEM(lz->pools, i); + poolSize = PyTuple_GET_SIZE(pool); + if (poolSize == 0) + continue; + poolIndex = lz->indices[i]; + /* clamp the index upper bound */ + if (poolIndex >= poolSize) + poolIndex = poolSize - 1; + element = PyTuple_GET_ITEM(pool, poolIndex); Py_INCREF(element); PyTuple_SET_ITEM(result, i, element); }