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

Re: ${(qP)${var}} causes core dump



Peter Stephenson wrote:

> Tanaka Akira wrote:
> > zsh dumps core as follows.
> > 
> > Z(2):akr@is27e1u11% Src/zsh -f
> > is27e1u11% var=a
> > is27e1u11% a=(\* \*)
> > is27e1u11% print -lr ${(qP)${var}}
> > \*
> > \*
> > is27e1u11% print -lr ${(qP)${var}}
> > zsh: segmentation fault (core dumped)  Src/zsh -f
> 
> The problem seems to be that paramsubst() is setting `copied = 1' after
> retrieving the inner expression.  However, the value is then fetched for
> the resulting parameter name `a', and it's only at that point one should
> take account of whether the value has been copied.  Hence it was
> erroneously operating directly on the value stored in the array.
> 
> Note that you can actually get away with ${(qP)var}, because the shell has
> already been told of the inner lookup.
> 
> The following is safe, but Sven can probably tell us if converting the
> unconditional assignment to
>   if (!aspar)
>       copied = 1;
> would be better.

It might save a little bit of memory but when thinking about possible
future changes, I think I prefer the unconditional assignment.

Bye
 Sven


--
Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx



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