aboutsummaryrefslogtreecommitdiff
path: root/py/mpz.c
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2018-05-19 11:20:29 -0500
committerDamien George <damien.p.george@gmail.com>2018-05-21 12:48:26 +1000
commitc4dafcef4fe9edaacaeeb16c412c298cbab3b414 (patch)
tree9d6054c0c3de654c9b53482d4d18a8d767d9264b /py/mpz.c
parent60eb5305f637e21f7ec4006924c06518ca6de476 (diff)
py/mpz: Avoid undefined behavior at integer overflow in mpz_hash.
Before this, ubsan would detect a problem when executing hash(006699999999999999999999999999999999999999999999999999999999999999999999) ../../py/mpz.c:1539:20: runtime error: left shift of 1067371580458 by 32 places cannot be represented in type 'mp_int_t' (aka 'long') When the overflow does occur it now happens as defined by the rules of unsigned arithmetic.
Diffstat (limited to 'py/mpz.c')
-rw-r--r--py/mpz.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/py/mpz.c b/py/mpz.c
index fa5086862..8687092d0 100644
--- a/py/mpz.c
+++ b/py/mpz.c
@@ -1532,7 +1532,7 @@ mpz_t *mpz_mod(const mpz_t *lhs, const mpz_t *rhs) {
// must return actual int value if it fits in mp_int_t
mp_int_t mpz_hash(const mpz_t *z) {
- mp_int_t val = 0;
+ mp_uint_t val = 0;
mpz_dig_t *d = z->dig + z->len;
while (d-- > z->dig) {