[Python-checkins] bpo-36791: Safer detection of integer overflow in sum(). (GH-13080)
Miss Islington (bot)
webhook-mailer at python.org
Sun May 12 05:37:20 EDT 2019
https://github.com/python/cpython/commit/b7e483b6d07081d5f81860258e95785975a7cbf8
commit: b7e483b6d07081d5f81860258e95785975a7cbf8
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-05-12T02:37:15-07:00
summary:
bpo-36791: Safer detection of integer overflow in sum(). (GH-13080)
(cherry picked from commit 29500737d45cbca9604d9ce845fb2acc3f531401)
Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>
files:
M Python/bltinmodule.c
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 6306c3ac5641..8083ac961feb 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;
}
More information about the Python-checkins
mailing list