From 87d54883c13cc5ced508829bd029f7f5de30b8fe Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 5 May 2019 14:26:23 +0300 Subject: [PATCH] bpo-36791: Safer detection of integer overflow in sum(). (GH-13080) (cherry picked from commit 29500737d45cbca9604d9ce845fb2acc3f531401) Co-authored-by: Serhiy Storchaka --- Python/bltinmodule.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 6306c3ac56415c..8083ac961feb55 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2374,9 +2374,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; }