1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

Allow turning off brace expansion in comsubs (rhbz#1078698)

There was no check for the -B/braceexpand option before calling
path_expand() to process brace expansion, making it impossible to
turn off brace expansion within command substitutions. Normally the
lexer flags brace expansion so that this code is not reached, but
shell code within command substitutions is handled differently.

Red Hat patches this by adding this check to the function itself:
642af4d6/f/ksh-20140301-fikspand.patch
But I think it's more logical to patch it at the point of decision.

src/cmd/ksh93/sh/macro.c: endfield():
- Decide to call either path_generate() or path_expand() based on
  the state of the SH_BRACEEXPAND shell option.
- Fix '#if SHOPT_BRACEPAT' preprocessor check that previously
  hardcoded this decision at compile time.

src/cmd/ksh93/tests/options.sh:
- Add tests.
This commit is contained in:
Martijn Dekker 2020-09-24 07:36:44 +02:00
parent c1d9eed54b
commit a14d17c0f4
4 changed files with 25 additions and 4 deletions

View file

@ -2489,10 +2489,11 @@ static void endfield(register Mac_t *mp,int split)
{
mp->shp->argaddr = 0;
#if SHOPT_BRACEPAT
count = path_generate(mp->shp,argp,mp->arghead);
#else
count = path_expand(mp->shp,argp->argval,mp->arghead);
if(sh_isoption(SH_BRACEEXPAND))
count = path_generate(mp->shp,argp,mp->arghead);
else
#endif /* SHOPT_BRACEPAT */
count = path_expand(mp->shp,argp->argval,mp->arghead);
if(count)
mp->fields += count;
else if(split) /* pattern is null string */