mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
This fixes erroneous syntax errors in parameter expansions such as
${var:-wor)d} or ${var+w(ord}. The parentheses now correctly lose their normal grammatical meaning within the braces. Fix by Eric Scrivner (@etscrivner) from July 2018 backported from ksh2020. This fix complies with POSIX: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 src/cmd/ksh93/sh/lex.c: sh_lex(): - Set the ST_QUOTE state when analysing a modifier with parameter expansions using operators ':', '-', '+', '='. This state causes subsequent characters (including parentheses) to be considered quoted, suppressing their normal grammatical meaning. src/cmd/ksh93/sh/macro.c: varsub(): - Same for skipping the expansion. Fixes: https://github.com/ksh93/ksh/issues/126 Prior discussion: https://github.com/att/ast/issues/475
This commit is contained in:
parent
b3d37b00b0
commit
5ed9ffd6c4
5 changed files with 48 additions and 2 deletions
|
@ -1628,7 +1628,8 @@ retry1:
|
|||
}
|
||||
else
|
||||
{
|
||||
sh_lexskip(lp,RBRACE,0,(!newops&&mp->quote)?ST_QUOTE:ST_NESTED);
|
||||
int state = (!newops && mp->quote || c=='-' || c=='+' || c=='=') ? ST_QUOTE : ST_NESTED;
|
||||
sh_lexskip(lp, RBRACE, 0, state);
|
||||
stkseek(stkp,offset);
|
||||
}
|
||||
argp=stkptr(stkp,offset);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue