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
|
- 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.
|
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:
|
2020-07-07:
|
||||||
|
|
||||||
- Four of the date formats accepted by 'printf %()T' have had their
|
- 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);
|
return(t);
|
||||||
}
|
}
|
||||||
sh_lex(lexp);
|
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))
|
if(io=inout(lexp,io,0))
|
||||||
{
|
{
|
||||||
t=makeparent(lexp,TSETIO,t);
|
t=makeparent(lexp,TSETIO,t);
|
||||||
t->tre.treio=io;
|
t->tre.treio=io;
|
||||||
}
|
}
|
||||||
done:
|
|
||||||
lexp->lasttok = savwdval;
|
lexp->lasttok = savwdval;
|
||||||
lexp->lastline = savline;
|
lexp->lastline = savline;
|
||||||
return(t);
|
return(t);
|
||||||
|
|
|
@ -761,4 +761,9 @@ x=0x1.0000000000000000000000000000p+6
|
||||||
v=$(printf $'%.28a\n' 64)
|
v=$(printf $'%.28a\n' 64)
|
||||||
[[ $v == "$x" ]] || err_exit "'printf %.28a 64' failed -- expected '$x', got '$v'"
|
[[ $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))
|
exit $((Errors<125?Errors:125))
|
||||||
|
|
Loading…
Reference in a new issue