changeset: 94450:886559229911 parent: 94447:3231a13a0c82 parent: 94449:2f73de7ffcf5 user: Benjamin Peterson date: Sun Feb 01 21:01:43 2015 -0500 files: Lib/test/test_itertools.py Misc/NEWS description: merge 3.4 (#23366) diff -r 3231a13a0c82 -r 886559229911 Lib/test/test_itertools.py --- a/Lib/test/test_itertools.py Sun Feb 01 20:18:29 2015 -0500 +++ b/Lib/test/test_itertools.py Sun Feb 01 21:01:43 2015 -0500 @@ -264,6 +264,11 @@ for proto in range(pickle.HIGHEST_PROTOCOL + 1): self.pickletest(proto, combinations(values, r)) # test pickling + @support.bigaddrspacetest + def test_combinations_overflow(self): + with self.assertRaises(OverflowError): + combinations("AA", 2**29) + # Test implementation detail: tuple re-use @support.impl_detail("tuple reuse is specific to CPython") def test_combinations_tuple_reuse(self): diff -r 3231a13a0c82 -r 886559229911 Misc/NEWS --- a/Misc/NEWS Sun Feb 01 20:18:29 2015 -0500 +++ b/Misc/NEWS Sun Feb 01 21:01:43 2015 -0500 @@ -229,6 +229,8 @@ - Issue #23326: Removed __ne__ implementations. Since fixing default __ne__ implementation in issue #21408 they are redundant. +- Issue #23366: Fixed possible integer overflow in itertools.combinations. + - Issue #23369: Fixed possible integer overflow in _json.encode_basestring_ascii. diff -r 3231a13a0c82 -r 886559229911 Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c Sun Feb 01 20:18:29 2015 -0500 +++ b/Modules/itertoolsmodule.c Sun Feb 01 21:01:43 2015 -0500 @@ -2359,6 +2359,10 @@ goto error; } + if (r > PY_SSIZE_T_MAX/sizeof(Py_ssize_t)) { + PyErr_SetString(PyExc_OverflowError, "r is too big"); + goto error; + } indices = PyMem_Malloc(r * sizeof(Py_ssize_t)); if (indices == NULL) { PyErr_NoMemory();