mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix wrong syntax error upon process substitution after redirection
Grammatically, redirections may occur anywhere within a command line and are removed after processing them, whereas a process substitution (<(commandlist) or >(commandlist)) is replaced by a file name which should be treated as just another simple word. So the following should not be a syntax error: $ cat </dev/null <(true) -ksh: syntax error: `)' unexpected $ cat </dev/null >(true) -ksh: syntax error: `)' unexpected $ cat >/dev/null <(true) -ksh: syntax error: `)' unexpected $ cat >/dev/null >(true) -ksh: syntax error: `)' unexpected This bug is in every ksh93 version. The problem is in the parser (parse.c). The process substitution is misparsed as a redirection due to inout() recursively parsing multiple redirections without recognising process substitutions. inout() is mistaking '<(' for '<' and '>(' for '>', which explains the incorrect syntax error. This also causes the following to fail to detect a syntax error: $ cat >&1 <(README.md [the contents of README.md are shown] ...and other syntax errors detected in the wrong spot, for example: $ { true; } <(echo wrong) -ksh: syntax error: `wrong' unexpected which should be: -ksh: syntax error: `<(' unexpected src/cmd/ksh93/sh/parse.c: - Add global inout_found_procsub flag. - inout(): On encountering a process substitution, set this flag and return, otherwise clear the flag. - simple(): After calling inout(), check this flag and, if set, jump back to where process substitutions are parsed. Resolves: https://github.com/ksh93/ksh/issues/418
This commit is contained in:
parent
8a0920ea0a
commit
06e56251b9
4 changed files with 44 additions and 1 deletions
6
NEWS
6
NEWS
|
@ -3,6 +3,12 @@ For full details, see the git log at: https://github.com/ksh93/ksh/tree/1.0
|
|||
|
||||
Any uppercase BUG_* names are modernish shell bug IDs.
|
||||
|
||||
2022-07-05:
|
||||
|
||||
- Fixed a spurious syntax error on encountering a process substitution
|
||||
following a redirection without being an argument to a redirection.
|
||||
For example, this now writes 'OK' to standard error: cat >&2 <(echo OK)
|
||||
|
||||
2022-07-02:
|
||||
|
||||
- Fixed a bug where, if the last command in a subshell was an external
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue