changeset: 94449:2f73de7ffcf5 branch: 3.4 parent: 94445:fb65ac5aaaac parent: 94448:014886dae5c4 user: Benjamin Peterson date: Sun Feb 01 21:00:15 2015 -0500 files: Lib/test/test_itertools.py Misc/NEWS Modules/itertoolsmodule.c description: merge 3.3 (#23366) diff -r fb65ac5aaaac -r 2f73de7ffcf5 Lib/test/test_itertools.py --- a/Lib/test/test_itertools.py Sun Feb 01 20:17:22 2015 -0500 +++ b/Lib/test/test_itertools.py Sun Feb 01 21:00:15 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 fb65ac5aaaac -r 2f73de7ffcf5 Misc/NEWS --- a/Misc/NEWS Sun Feb 01 20:17:22 2015 -0500 +++ b/Misc/NEWS Sun Feb 01 21:00:15 2015 -0500 @@ -50,6 +50,8 @@ Library ------- +- Issue #23366: Fixed possible integer overflow in itertools.combinations. + - Issue #23369: Fixed possible integer overflow in _json.encode_basestring_ascii. diff -r fb65ac5aaaac -r 2f73de7ffcf5 Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c Sun Feb 01 20:17:22 2015 -0500 +++ b/Modules/itertoolsmodule.c Sun Feb 01 21:00:15 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();