diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2019-05-05 11:26:23 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-05 11:26:23 (GMT) |
commit | 29500737d45cbca9604d9ce845fb2acc3f531401 (patch) | |
tree | 5136598be241d81304a00d8018ecdd8f363482a9 /Python | |
parent | 88f07a804a0adc0b6ee87687b59d8416113c7331 (diff) | |
download | cpython-29500737d45cbca9604d9ce845fb2acc3f531401.zip cpython-29500737d45cbca9604d9ce845fb2acc3f531401.tar.gz cpython-29500737d45cbca9604d9ce845fb2acc3f531401.tar.bz2 |
bpo-36791: Safer detection of integer overflow in sum(). (GH-13080)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 7a2b259..047cca0 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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; } |