Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

SIGSEGV caused by global substitution modifier

Please have a look at this:

  $ zsh-2.6-beta5 -Fc 'FOO=123;echo $FOO:gs//bar/'
  $ zsh-2.6-beta10 -fc 'FOO=123;echo $FOO:gs//bar/'
  zsh: segmentation fault  zsh-2.6-beta10 -fc 'FOO=123;echo $FOO:gs//bar/'

$FOO:gs/// loops forever now, which is especially unpleasant (since
not interruptible) when it occurs in completion control functions like
P.Stephenson's new `multicomp'. This is how I noticed the problem.

You might want to try `!??:gs///' on the command line, too. Don't.

An empty left-hand side of a substitution has a special meaning
("use scan string or previous match"), right? Only if there's no
non-empty scan string or previous match, the left-hand side evaluates
to a null string, and zsh chokes.

There's another (somewhat related) problem: Used on the result of
parameter expansion, empty l strings of substitution modifiers don't
produce the expected result:

  $ FOO=1213
  $ echo $FOO:s/1/a/:s//b/

I've expected `a2b3'. That is what `!:s/1/a/:s//b/' would give.

This "feature" is present at least since zsh-2.4.306-beta. Are there
any rationales behind this?

[zsh-2.6-beta10, Linux 1.2.0, libc 4.5.26, gcc 2.5.8]
Thorsten Meinecke

Messages sorted by: Reverse Date, Date, Thread, Author