(eval4): Detect overflow properly when multiplying INTMAX_MIN * -1.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 8 Jun 2006 02:53:25 +0000 (02:53 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 8 Jun 2006 02:53:25 +0000 (02:53 +0000)
ChangeLog
src/expr.c

index c6a98a3..0036b94 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,12 @@
-2006-06-06  Paul Eggert  <eggert@cs.ucla.edu>
+2006-06-07  Paul Eggert  <eggert@cs.ucla.edu>
 
        * Version 6.0-cvs.
 
+       * src/expr.c (eval4): Detect overflow properly when multiplying
+       INTMAX_MIN * -1.
+
+2006-06-06  Paul Eggert  <eggert@cs.ucla.edu>
+
        * NEWS: The 'expr' command now detects and reports integer overflow.
        (It would be better to use extended precision instead, but that
        would be more work.)
index 7b5c77b..e0510fc 100644 (file)
@@ -640,7 +640,9 @@ eval4 (bool evaluate)
          if (fxn == multiply)
            {
              val = l->u.i * r->u.i;
-             if (! (l->u.i == 0 || val / l->u.i == r->u.i))
+             if (! (l->u.i == 0 || r->u.i == 0
+                    || ((val < 0) == ((l->u.i < 0) ^ (r->u.i < 0))
+                        && val / l->u.i == r->u.i)))
                integer_overflow ('*');
            }
          else