From: Pablo Galindo Date: Sun, 10 Feb 2019 19:56:58 +0000 (+0000) Subject: Fix division by 0 when checking for overflow in math.prod (GH-11808) X-Git-Tag: v3.8.0a2~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4207907c2b8c0b3da62de2acdb8b22b5bbe7f7a2;p=thirdparty%2FPython%2Fcpython.git Fix division by 0 when checking for overflow in math.prod (GH-11808) --- diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 083759ca75e1..856b1e8ac11e 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1756,6 +1756,10 @@ class IsCloseTests(unittest.TestCase): with self.assertRaises(TypeError): prod([10, 20], [30, 40]) # start is a keyword-only argument + self.assertEqual(prod([0, 1, 2, 3]), 0) + self.assertEqual(prod([1, 0, 2, 3]), 0) + self.assertEqual(prod(range(10)), 0) + def test_main(): from doctest import DocFileSuite suite = unittest.TestSuite() diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index d2f8d5334736..2272f622f0b9 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -2561,8 +2561,8 @@ math_prod_impl(PyObject *module, PyObject *iterable, PyObject *start) long x = i_result * b; /* Continue if there is no overflow */ if (overflow == 0 - && x < INT_MAX && x > INT_MIN - && !(b != 0 && x / i_result != b)) { + && x < LONG_MAX && x > LONG_MIN + && !(b != 0 && x / b != i_result)) { i_result = x; Py_DECREF(item); continue;