bpo-36791: Safer detection of integer overflow in sum(). (GH-13080)

This commit is contained in:
Serhiy Storchaka 2019-05-05 14:26:23 +03:00 committed by GitHub
parent 88f07a804a
commit 29500737d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2375,9 +2375,11 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
}
if (PyLong_CheckExact(item)) {
long b = PyLong_AsLongAndOverflow(item, &overflow);
long x = i_result + b;
if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
i_result = x;
if (overflow == 0 &&
(i_result >= 0 ? (b <= LONG_MAX - i_result)
: (b >= LONG_MIN - i_result)))
{
i_result += b;
Py_DECREF(item);
continue;
}