]> git.eshelyaron.com Git - emacs.git/commitdiff
update-game-score: fix bug with -r
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 21 Mar 2011 07:46:53 +0000 (00:46 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 21 Mar 2011 07:46:53 +0000 (00:46 -0700)
* update-game-score.c (main): Don't set 'scores' to garbage when
-r is specified and scorecount != MAX_SCORES.  This bug was
introduced in the 2002-04-10 change, and was found with gcc
-Wstrict-overflow (GCC 4.5.2, x86-64).

lib-src/ChangeLog
lib-src/update-game-score.c

index cc713f0b68c010009adc142818dc9aee4a187d4f..2548561f31393aaf71f9fe3ac23e26913c0c7b81 100644 (file)
@@ -1,5 +1,11 @@
 2011-03-21  Paul Eggert  <eggert@cs.ucla.edu>
 
+       update-game-score: fix bug with -r
+       * update-game-score.c (main): Don't set 'scores' to garbage when
+       -r is specified and scorecount != MAX_SCORES.  This bug was
+       introduced in the 2002-04-10 change, and was found with gcc
+       -Wstrict-overflow (GCC 4.5.2, x86-64).
+
        fakemail: Remove dependency on ignore-value.
        This undoes some of the recent fakemail-related changes.
        It is made possible due to recent changes to gnulib's stdio module.
index 70b79a64f91ca2878f5dcc9ed7f072a0878dc0e6..e95e2ce259d479f4f0d8dc832fe7fd992f021caf 100644 (file)
@@ -242,13 +242,15 @@ main (int argc, char **argv)
   push_score (&scores, &scorecount, newscore, user_id, newdata);
   sort_scores (scores, scorecount, reverse);
   /* Limit the number of scores.  If we're using reverse sorting, then
-     we should increment the beginning of the array, to skip over the
-     *smallest* scores.  Otherwise, we just decrement the number of
-     scores, since the smallest will be at the end. */
+     also increment the beginning of the array, to skip over the
+     *smallest* scores.  Otherwise, just decrementing the number of
+     scores suffices, since the smallest is at the end. */
   if (scorecount > MAX_SCORES)
-    scorecount -= (scorecount - MAX_SCORES);
-  if (reverse)
-    scores += (scorecount - MAX_SCORES);
+    {
+      if (reverse)
+       scores += (scorecount - MAX_SCORES);
+      scorecount = MAX_SCORES;
+    }
   if (write_scores (scorefile, scores, scorecount) < 0)
     {
       unlock_file (scorefile, lockstate);