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

Re: [SOLVED] Libtool/zsh quoting problem: a zsh... bug?

On Sat, Feb 11, 2006 at 01:21:43PM +0300, Andrey Borzenkov wrote:
> See this thread: <http://www.zsh.org/mla/workers/2002/msg00542.html>; there 
> was an attempt to fix it in 16949 but apparently it was incomplete and never 
> went in.

I just took a look at that code using Peter's old patch as a start, and
the assertion that the quotes have been stripped out is not quite true:
there are still Dnull and Snull characters remaining which indicate that
there used to be a double- or single-quotes present.  This allows us to
check the string.  An overly simple version is this:

--- subst.c	6 Feb 2006 11:57:06 -0000	1.44
+++ subst.c	11 Feb 2006 18:07:23 -0000
@@ -2012,6 +2012,8 @@ paramsubst(LinkList l, LinkNode n, char 
 		multsub(&val, (aspar ? NULL : &aval), &isarr, NULL);
 		copied = 1;
+		if (spbreak && (*s == Dnull || *s == Snull))
+		    spbreak = 0;
 	case ':':

This will turn off word-splitting if the string started with a single or
a double quote.  This is incomplete because the arg may be something
more complicated (such as: 'one' 'two' 'three four'), but it seems
better than what we have now.

One question I have is what to do about ${=1:"$@"}?  In the patch above,
I chose to let the double quotes override the '='.  If that is not
desired, change the new "if" to only trigger disallow an spbreak of 2:

+		if (spbreak == 1 && (*s == Dnull || *s == Snull))


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