mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix ERE repetition expressions in [[ ... =~ ERE{x,y} ]] (#54)
Regular expressions that combine a repetition expression with
a parenthesized sub-expression throw a garbled syntax error:
$ [[ AATAAT =~ (AAT){2} ]]
ksh: syntax error: `~(E)(AAT){2} ]]
:'%Cred%h%Creseksh: syntax error: `~(E)(AAT){2} ]]
:'%Cred%h%Creseksh: syntax' unexpected
The syntax error occurs because ksh is not fully
accounting for '=~' when it runs into a curly bracket.
This fix disables the syntax error when the operator
is '=~' and adds handling for '(str){x}' (to allow for
more than one sub-expression). This bugfix and the
regression tests for it were backported from ksh93v-
2014-12-24-beta.
src/cmd/ksh93/sh/lex.c:
- Do not trigger a syntax error for '{x}' when the operator
is '=~' and add handling for multiple parentheses when
combined with '{x}'.
src/cmd/ksh93/tests/bracket.sh:
- Add two tests from ksh93v- to test sub-expressions
combined with the '{x}' quantifier.
This commit is contained in:
parent
ad9a9219f0
commit
db1d539d49
3 changed files with 15 additions and 1 deletions
|
|
@ -388,6 +388,12 @@ int sh_lex(Lex_t* lp)
|
|||
switch(n)
|
||||
{
|
||||
case S_BREAK:
|
||||
if(lp->lex.incase>TEST_RE && mode==ST_NORM && c==LPAREN)
|
||||
{
|
||||
pushlevel(lp,RPAREN,mode);
|
||||
mode = ST_NESTED;
|
||||
continue;
|
||||
}
|
||||
fcseek(-LEN);
|
||||
goto breakloop;
|
||||
case S_EOF:
|
||||
|
|
@ -1163,7 +1169,7 @@ int sh_lex(Lex_t* lp)
|
|||
}
|
||||
if(mode==ST_NONE)
|
||||
return(0);
|
||||
if(c!=n)
|
||||
if(c!=n && lp->lex.incase<TEST_RE)
|
||||
{
|
||||
lp->token = c;
|
||||
sh_syntax(lp);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue