py/mpz: Fix bug with overflowing C-shift in division routine.
When DIG_SIZE=32, a uint32_t is used to store limbs, and no normalisation is needed because the MSB is already set, then there will be left and right shifts (in C) by 32 of a 32-bit variable, leading to undefined behaviour. This patch fixes this bug.
This commit is contained in:
@@ -8,3 +8,10 @@ for i in range(11):
|
||||
y = delta * (j)# - 5) # TODO reinstate negative number test when % is working with sign correctly
|
||||
if y != 0:
|
||||
print(x % y)
|
||||
|
||||
# these check an edge case on 64-bit machines where two mpz limbs
|
||||
# are used and the most significant one has the MSB set
|
||||
x = 0x8000000000000000
|
||||
print((x + 1) % x)
|
||||
x = 0x86c60128feff5330
|
||||
print((x + 1) % x)
|
||||
|
||||
Reference in New Issue
Block a user