Avoid shred segfault on 64-bit systems.
authorJim Meyering <jim@meyering.net>
Sat, 10 Dec 2005 21:58:23 +0000 (21:58 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 10 Dec 2005 21:58:23 +0000 (21:58 +0000)
(isaac_refill): Don't try to negate a
local of type uint32_t.  Convert it to int32_t first.

src/rand-isaac.c

index 8450ae830a6e85a85bb5f05832e30930caf0288e..de90168c4c40476e415c8074ae411c62931a799c 100644 (file)
@@ -105,15 +105,18 @@ isaac_refill (struct isaac_state *s, uint32_t r[/* s>-words */])
       r += 4;
     }
   while ((m += 4) < s->mm + w / 2);
+
   do
     {
-      isaac_step (s, a << 13, a, b, m, -w / 2, r);
-      isaac_step (s, a >> 6, a, b, m + 1, -w / 2, r + 1);
-      isaac_step (s, a << 2, a, b, m + 2, -w / 2, r + 2);
-      isaac_step (s, a >> 16, a, b, m + 3, -w / 2, r + 3);
+      int32_t zz = w;
+      isaac_step (s, a << 13, a, b, m, -zz / 2, r);
+      isaac_step (s, a >> 6, a, b, m + 1, -zz / 2, r + 1);
+      isaac_step (s, a << 2, a, b, m + 2, -zz / 2, r + 2);
+      isaac_step (s, a >> 16, a, b, m + 3, -zz / 2, r + 3);
       r += 4;
     }
   while ((m += 4) < s->mm + w);
+
   s->a = a;
   s->b = b;
 }