diff options
-rw-r--r-- | bin/sh/arith_yylex.c | 4 | ||||
-rw-r--r-- | tools/regression/bin/sh/expansion/arith13.0 | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/bin/sh/arith_yylex.c b/bin/sh/arith_yylex.c index f6eebdb..ad08184 100644 --- a/bin/sh/arith_yylex.c +++ b/bin/sh/arith_yylex.c @@ -218,9 +218,13 @@ checkeqcur: value += ARITH_REM - '%'; goto checkeq; case '+': + if (buf[1] == '+') + return ARITH_BAD; value += ARITH_ADD - '+'; goto checkeq; case '-': + if (buf[1] == '-') + return ARITH_BAD; value += ARITH_SUB - '-'; goto checkeq; case '~': diff --git a/tools/regression/bin/sh/expansion/arith13.0 b/tools/regression/bin/sh/expansion/arith13.0 new file mode 100644 index 0000000..207e488 --- /dev/null +++ b/tools/regression/bin/sh/expansion/arith13.0 @@ -0,0 +1,6 @@ +# $FreeBSD$ +# Pre-increment and pre-decrement in arithmetic expansion are not in POSIX. +# Require either an error or a correct implementation. + +! (eval 'x=4; [ $((++x)) != 5 ] || [ $x != 5 ]') 2>/dev/null && +! (eval 'x=2; [ $((--x)) != 1 ] || [ $x != 1 ]') 2>/dev/null |