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:
Guido van Rossum 1997-01-06 22:53:20 +00:00
parent d81a1baa5f
commit 541cdd84ac
1 changed files with 4 additions and 2 deletions

View File

@ -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: