diff options
author | Jeff Epler <jepler@gmail.com> | 2018-05-19 11:20:29 -0500 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2018-05-21 12:48:26 +1000 |
commit | c4dafcef4fe9edaacaeeb16c412c298cbab3b414 (patch) | |
tree | 9d6054c0c3de654c9b53482d4d18a8d767d9264b /py/mpz.c | |
parent | 60eb5305f637e21f7ec4006924c06518ca6de476 (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.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -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) { |