Browse Source
Fix division by 0 when checking for overflow in math.prod (GH-11808)
pull/11810/head
Pablo Galindo
8 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
6 additions and
2 deletions
-
Lib/test/test_math.py
-
Modules/mathmodule.c
|
|
|
@ -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() |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|