Fix overflow test for multiply to catch some cases it missed.
Added warning about dependency of float/complex hash on int hash.
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 6264920..3598c90 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -237,6 +237,8 @@
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 @@
(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: