test-posixtm: don't assume signed integer wraparound
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 5 Jan 2012 00:04:38 +0000 (16:04 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 5 Jan 2012 00:04:56 +0000 (16:04 -0800)
* tests/test-posixtm.c (main): Don't assume wraparound semantics
after signed integer overflow.  Inspired by (though it may not
fix) Bruno Haible's bug report in
<http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00066.html>.

ChangeLog
tests/test-posixtm.c

index 17e9ab3..0f554e6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2012-01-04  Paul Eggert  <eggert@cs.ucla.edu>
 
+       test-posixtm: don't assume signed integer wraparound
+       * tests/test-posixtm.c (main): Don't assume wraparound semantics
+       after signed integer overflow.  Inspired by (though it may not
+       fix) Bruno Haible's bug report in
+       <http://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00066.html>.
+
        Spell out "Windows 9x" and "Windows XP".
        * lib/poll.c, lib/select.c: In comments, replace "Win9x" with
        "Windows 9x" and "WinXP" with "Windows XP".
index 229c82c..8400c39 100644 (file)
@@ -118,7 +118,7 @@ main (void)
   for (i = 0; T[i].in; i++)
     {
       time_t t_out;
-      time_t t_exp = T[i].t_expected;
+      time_t t_exp;
       bool ok;
 
       /* Some tests assume that time_t is signed.
@@ -130,13 +130,16 @@ main (void)
           continue;
         }
 
-      if (T[i].valid && t_exp != T[i].t_expected)
+      if (! (TYPE_MINIMUM (time_t) <= T[i].t_expected
+             && T[i].t_expected <= TYPE_MAXIMUM (time_t)))
         {
           printf ("skipping %s: result is out of range of your time_t\n",
                   T[i].in);
           continue;
         }
 
+      t_exp = T[i].t_expected;
+
       /* If an input string does not specify the year number, determine
          the expected output by calling posixtime with an otherwise
          equivalent string that starts with the current year.  */