summaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2006-06-08 02:53:25 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2006-06-08 02:53:25 +0000
commitcad27cdc2ea46ec401b71b76a92fcf3bc1d094e0 (patch)
tree728f5aa7f63dc38a6788e989bf8b1fd14a359b66 /src/expr.c
parent0eef2e1e8b40c36244311e4180fb5dd76ea50fa6 (diff)
downloadcoreutils-cad27cdc2ea46ec401b71b76a92fcf3bc1d094e0.tar.xz
(eval4): Detect overflow properly when multiplying INTMAX_MIN * -1.
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/expr.c b/src/expr.c
index 7b5c77be6..e0510fc10 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -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