From: Paul Eggert Date: Thu, 8 Jun 2006 02:53:25 +0000 (+0000) Subject: (eval4): Detect overflow properly when multiplying INTMAX_MIN * -1. X-Git-Tag: v6.0~320 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cad27cdc2ea46ec401b71b76a92fcf3bc1d094e0;p=thirdparty%2Fcoreutils.git (eval4): Detect overflow properly when multiplying INTMAX_MIN * -1. --- diff --git a/ChangeLog b/ChangeLog index c6a98a361b..0036b94b23 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,12 @@ -2006-06-06 Paul Eggert +2006-06-07 Paul Eggert * Version 6.0-cvs. + * src/expr.c (eval4): Detect overflow properly when multiplying + INTMAX_MIN * -1. + +2006-06-06 Paul Eggert + * 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.) diff --git a/src/expr.c b/src/expr.c index 7b5c77be6f..e0510fc10e 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