summaryrefslogtreecommitdiffstats
path: root/bin/sh
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2011-11-08 23:54:39 +0000
committerjilles <jilles@FreeBSD.org>2011-11-08 23:54:39 +0000
commit91e70324c8742bc6ba8e92c469508daebe32f7da (patch)
tree5bfa698c2402cfc68addf71cdcdafba33ee2e256 /bin/sh
parent65c845ce4a1064c29fab10b13db0b578d81cbca4 (diff)
downloadFreeBSD-src-91e70324c8742bc6ba8e92c469508daebe32f7da.zip
FreeBSD-src-91e70324c8742bc6ba8e92c469508daebe32f7da.tar.gz
sh: Remove undefined behaviour due to overflow in +/-/* in arithmetic.
With i386 base gcc and i386 base clang, arith_yacc.o remains unchanged.
Diffstat (limited to 'bin/sh')
-rw-r--r--bin/sh/arith_yacc.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/bin/sh/arith_yacc.c b/bin/sh/arith_yacc.c
index 041e638..48c63ea 100644
--- a/bin/sh/arith_yacc.c
+++ b/bin/sh/arith_yacc.c
@@ -131,11 +131,11 @@ static arith_t do_binop(int op, arith_t a, arith_t b)
yyerror("divide error");
return op == ARITH_REM ? a % b : a / b;
case ARITH_MUL:
- return a * b;
+ return (uintmax_t)a * (uintmax_t)b;
case ARITH_ADD:
- return a + b;
+ return (uintmax_t)a + (uintmax_t)b;
case ARITH_SUB:
- return a - b;
+ return (uintmax_t)a - (uintmax_t)b;
case ARITH_LSHIFT:
return a << b;
case ARITH_RSHIFT:
OpenPOWER on IntegriCloud