mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
Fix a syntax error when ((...)) is combined with redirections (#68)
This bugfix was backported from ksh93v- 2013-10-10-alpha. src/cmd/ksh93/sh/parse: item(): - The done label is placed after the 'inout' call for handling I/O redirections. This causes the command below to produce a syntax error because the '>' is not handled as a redirection operator after 'goto done': $ ((1+2)) > /dev/null /usr/bin/ksh: syntax error: `>' unexpected Moving the done label fixes the syntax error as 'inout' is now called to handle the redirection operator. src/cmd/ksh93/tests/arith.sh: - Add a simple regression test.
This commit is contained in:
parent
361fe1fcc3
commit
6930666234
3 changed files with 10 additions and 2 deletions
3
NEWS
3
NEWS
|
@ -12,6 +12,9 @@ Any uppercase BUG_* names are modernish shell bug IDs.
|
|||
- Fixed a memory leak when restoring PATH when temporarily setting PATH
|
||||
for a command (e.g. PATH=/foo/bar command ...) or in a virtual subshell.
|
||||
|
||||
- Combining ((...)) with redirections no longer causes a syntax error
|
||||
due to the parser handling '>' incorrectly.
|
||||
|
||||
2020-07-07:
|
||||
|
||||
- Four of the date formats accepted by 'printf %()T' have had their
|
||||
|
|
|
@ -1367,13 +1367,13 @@ static Shnode_t *item(Lex_t *lexp,int flag)
|
|||
return(t);
|
||||
}
|
||||
sh_lex(lexp);
|
||||
/* redirection(s) following a compound command */
|
||||
done:
|
||||
/* redirection(s) following a compound command or arithmetic expression */
|
||||
if(io=inout(lexp,io,0))
|
||||
{
|
||||
t=makeparent(lexp,TSETIO,t);
|
||||
t->tre.treio=io;
|
||||
}
|
||||
done:
|
||||
lexp->lasttok = savwdval;
|
||||
lexp->lastline = savline;
|
||||
return(t);
|
||||
|
|
|
@ -761,4 +761,9 @@ x=0x1.0000000000000000000000000000p+6
|
|||
v=$(printf $'%.28a\n' 64)
|
||||
[[ $v == "$x" ]] || err_exit "'printf %.28a 64' failed -- expected '$x', got '$v'"
|
||||
|
||||
# ======
|
||||
# Redirections with ((...)) should not cause a syntax error
|
||||
(eval '((1)) >/dev/null') 2>/dev/null || err_exit 'redirections with ((...)) yield a syntax error'
|
||||
|
||||
# ======
|
||||
exit $((Errors<125?Errors:125))
|
||||
|
|
Loading…
Reference in a new issue