summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Epler <jepler@unpythonic.net>2018-03-25 16:01:06 -0500
committerJeff Epler <jepler@gmail.com>2018-03-29 06:42:10 -0500
commita55988a547011c04978a1661325062397ef74110 (patch)
tree2b9cee87e038cfd525c4dfc6c3932e44683f73af
parent1eba5804434a8acc182c23aadf5b5a5dcbe901fa (diff)
Fix assertion failure in mpz_divmod_inpl
.. turning this from an assertion failure into an exception: pow(1,1,0)
-rw-r--r--py/objint_mpz.c4
-rw-r--r--tests/basics/builtin_pow3.py5
2 files changed, 9 insertions, 0 deletions
diff --git a/py/objint_mpz.c b/py/objint_mpz.c
index 7b5cb0b9d..808fae6e4 100644
--- a/py/objint_mpz.c
+++ b/py/objint_mpz.c
@@ -343,6 +343,10 @@ mp_obj_t mp_obj_int_pow3(mp_obj_t base, mp_obj_t exponent, mp_obj_t modulus) {
mpz_t *rhs = mp_mpz_for_int(exponent, &r_temp);
mpz_t *mod = mp_mpz_for_int(modulus, &m_temp);
+ if (mpz_is_zero(mod)) {
+ mp_raise_msg(&mp_type_ValueError, "pow() 3rd argument cannot be 0");
+ }
+
mpz_pow3_inpl(&(res_p->mpz), lhs, rhs, mod);
if (lhs == &l_temp) { mpz_deinit(lhs); }
diff --git a/tests/basics/builtin_pow3.py b/tests/basics/builtin_pow3.py
index 69b57e548..293a5acc9 100644
--- a/tests/basics/builtin_pow3.py
+++ b/tests/basics/builtin_pow3.py
@@ -22,3 +22,8 @@ try:
print(pow(4, 5, "z"))
except TypeError:
print("TypeError expected")
+
+try:
+ print(pow(4, 5, 0))
+except ValueError:
+ print("ValueError expected")