http://ftp.nluug.nl/pub/os/Linux/distr/pardusrepo/sources/xscreensaver-5.02.tar.gz
[xscreensaver] / hacks / glx / glhanoi.c
index ef10c20ec7b1d594e2002c893de1604970e7946c..8bc9a1c909422a2d4a7f84e7febc9bb78cc32675 100644 (file)
@@ -1312,6 +1312,11 @@ ENTRYPOINT void init_glhanoi(ModeInfo * mi)
     if (glhanoi->numberOfDisks <= 1)
       glhanoi->numberOfDisks = 3 + (int) BELLRAND(9);
 
+    /* magicnumber is a bitfield, so we can't have more than 31 discs
+       on a system with 4-byte ints. */
+    if (glhanoi->numberOfDisks >= 8 * sizeof(int))
+      glhanoi->numberOfDisks = (8 * sizeof(int)) - 1;
+
        glhanoi->maxDiskIdx = glhanoi->numberOfDisks - 1;
        glhanoi->wire = MI_IS_WIREFRAME(mi);
        glhanoi->light = light;