Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: ${(qP)${var}} causes core dump
- X-seq: zsh-workers 9280
- From: Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: Re: ${(qP)${var}} causes core dump
- Date: Sun, 09 Jan 2000 18:44:58 +0000
- In-reply-to: "Tanaka Akira"'s message of "09 Jan 2000 17:25:46 +0900." <rsqln5z1wj9.fsf@xxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
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.
Index: Src/subst.c
===================================================================
RCS file: /home/pws/CVSROOT/projects/zsh/Src/subst.c,v
retrieving revision 1.2
diff -u -r1.2 subst.c
--- Src/subst.c 1999/12/03 19:12:11 1.2
+++ Src/subst.c 2000/01/09 18:36:23
@@ -1022,7 +1022,6 @@
aspar = 0;
} else if (aspar)
idbeg = val;
- copied = 1;
*s = sav;
while (INULL(*s))
s++;
--
Peter Stephenson <pws@xxxxxxxxxxxxxxxxxxxxxxxx>
Messages sorted by:
Reverse Date,
Date,
Thread,
Author