Fix overflow test for multiply to catch some cases it missed.
Added warning about dependency of float/complex hash on int hash.
This commit is contained in:
parent
d81a1baa5f
commit
541cdd84ac
|
@ -237,6 +237,8 @@ static long
|
|||
int_hash(v)
|
||||
intobject *v;
|
||||
{
|
||||
/* XXX If this is changed, you also need to change the way
|
||||
Python's long, float and complex types are hashed. */
|
||||
long x = v -> ob_ival;
|
||||
if (x == -1)
|
||||
x = -2;
|
||||
|
@ -385,13 +387,13 @@ int_mul(v, w)
|
|||
(NB b == bl in this case, and we make a = al) */
|
||||
|
||||
y = ah*b;
|
||||
if (y >= (1L << (LONG_BIT/2)))
|
||||
if (y >= (1L << (LONG_BIT/2 - 1)))
|
||||
goto bad;
|
||||
a &= (1L << (LONG_BIT/2)) - 1;
|
||||
x = a*b;
|
||||
if (x < 0)
|
||||
goto bad;
|
||||
x += y << LONG_BIT/2;
|
||||
x += y << (LONG_BIT/2);
|
||||
if (x < 0)
|
||||
goto bad;
|
||||
ok:
|
||||
|
|
Loading…
Reference in New Issue