From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29834 invoked by alias); 3 Nov 2016 10:23:46 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39816 Received: (qmail 1124 invoked from network); 3 Nov 2016 10:23:46 -0000 X-Qmail-Scanner-Diagnostics: from mailout1.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.11):SA:0(-2.3/5.0):. Processed in 0.492145 secs); 03 Nov 2016 10:23:46 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7f4-f791c6d000006eac-fd-581b10299b33 Date: Thu, 03 Nov 2016 10:23:34 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: [BUG] (z)-flag interrupts if $() in input Message-id: <20161103102334.173d37e5@pwslap01u.europe.root.pri> In-reply-to: <161030110455.ZM14677@torch.brasslantern.com> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djPc7qaAtIRBi1/+C0ONj9kcmD0WHXw A1MAYxSXTUpqTmZZapG+XQJXxs5NV9gKZvJV7H8R38D4iKuLkZNDQsBEYsWHx6wQtpjEhXvr 2boYuTiEBJYySnyduZUZwullkrh7dA8TTEfn/COsEIlljBJP58FUTWOS2P7nCwuEc5pRYvWN GWAtQgJnGCXOTeAHsVkEVCVamh6xgNhsAoYSUzfNZgSxRQTEJc6uPQ8WFxYwk/j/+h9YL6+A vcSVeTvADuQUsJJ4/fcAWJxfQF/i6t9PUCfZS8y8coYRol5Q4sfke2BzmAV0JLZte8wOYctL bF7zFuxSCYH/bBK/bmwEcjiAHFmJTQeYIea4SDx/8gMaGMISr45vYYewZSQ6Ow5C7epnlHjS 7QsxZwajxOkzO9ggEtYSfbcvMkIs45OYtG061HxeiY42IQjTQ2LDVFuIakeJyaeXMU1gVJyF 5OpZSK6eheTqBYzMqxhFUkuLc9NTi030ihNzi0vz0vWS83M3MQKTwOl/x7/sYFx8zOoQowAH oxIP747PkhFCrIllxZW5hxglOJiVRHib+aUjhHhTEiurUovy44tKc1KLDzFKc7AoifPuWXAl XEggPbEkNTs1tSC1CCbLxMEp1cC4/s/3+V1HvC5ekHue8uWWQVqy2JGMommP7vDx6/7cLa54 e3H/74UTVDZvX/1e8fBShYwE/Z9d9zX9bxfm1+qUrl75uCAye+bPBA6pR88/LFvstertxdAX 5x7qhs5YP/WZTTJ3tvPy2CVRz7TZeZeEJ/l7ybrd59lhGL21mjea/+/M2awLl+g4KbEUZyQa ajEXFScCACFaI5/+AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGIsWRmVeSWpSXmKPExsVy+t/xa7rKAtIRBn07TC0ONj9kcmD0WHXw A1MAY5SbTUZqYkpqkUJqXnJ+SmZeuq1SaIibroWSQl5ibqqtUoSub0iQkkJZYk4pkGdkgAYc nAPcg5X07RLcMnZuusJWMJOvYv+L+AbGR1xdjJwcEgImEp3zj7BC2GISF+6tZ+ti5OIQEljC KPFp+WF2CGcGk0TrqzVQzmlGiWN9XSwQzhlGiZMXjjOC9LMIqEq0ND1iAbHZBAwlpm6aDRYX ERCXOLv2PFhcWMBM4v/rf0wgNq+AvcSVeTvAdnMKWEm8/nuACWLoWiaJs9tegDXzC+hLXP37 iQniQHuJmVfOMEI0C0r8mHwPbCizgJbE5m1NrBC2vMTmNW+ZQWwhAXWJG3d3s09gFJ6FpGUW kpZZSFoWMDKvYhRJLS3OTc8tNtQrTswtLs1L10vOz93ECIyjbcd+bt7BeGlj8CFGAQ5GJR5e gW+SEUKsiWXFlbmHGCU4mJVEeCfxSUcI8aYkVlalFuXHF5XmpBYfYjQFhsxEZinR5HxgjOeV xBuaGJpbGhoZW1iYGxkpifOWfLgSLiSQnliSmp2aWpBaBNPHxMEp1cCY5187O3VmYPSRusCC rft2rVi6SD+x6uQLT4vyxSzN0SsmGj4/n3jmf/dj+eOlSUHOa4NiXbaViW5bvuxz+ATrzweL TaeeZWj16nf5Jnd31kr9ifvnMR9ykf19sOr8rql9Cz8FX8jyezXTScdGUWHSB0fz//fNt2wO 9f23iDeyZsmSv8G+syfcVGIpzkg01GIuKk4EAKhV3Om5AgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161103102336eucas1p2764f3fb0468b7d5cebd3396d8550167a X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUb?= =?UTF-8?B?7IK87ISx7KCE7J6QG1ByaW5jaXBhbCBFbmdpbmVlciwgU29mdHdhcmU=?= X-Global-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUbU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtQcmluY2lwYWwgRW5naW5lZXIsIFNvZnR3YXJl?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDA1Q0QwNTAwNTg=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161030181147epcas5p3e16aa39667097b8def331dd1a8038220 X-RootMTR: 20161030181147epcas5p3e16aa39667097b8def331dd1a8038220 References: <1477809189.1509250.771544241.795E8177@webmail.messagingengine.com> <20161030152525.GA12137@fujitsu.shahaf.local2> <20161030170949.612551cf@ntlworld.com> <161030110455.ZM14677@torch.brasslantern.com> On Sun, 30 Oct 2016 11:04:55 -0700 Bart Schaefer wrote: > This solves the specific example but doesn't solve the general problem; > if there is a parse error inside $(...) then ${(z)...} fails. > > torch% a='x $() y' > torch% print -rl -- ${(z)a} > x > $() > y > torch% a='x $(|||) y' > torch% print -rl -- ${(z)a} > x > $(|| This fixes it up in the usual way, i.e. read to the end of the string but don't attempt to parse further. It's easy since we're still in the mode where the command substitution is being copied to the token on input, so just carry on doing that until the end of the string. pws diff --git a/Src/lex.c b/Src/lex.c index e0935bf..8896128 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -2138,8 +2138,17 @@ skipcomm(void) lexflags &= ~LEXFLAGS_ZLE; dbparens = 0; /* restored by zcontext_restore_partial() */ - if (!parse_event(OUTPAR) || tok != OUTPAR) - lexstop = 1; + if (!parse_event(OUTPAR) || tok != OUTPAR) { + if (strin) { + /* + * Get the rest of the string raw since we don't + * know where this token ends. + */ + while (!lexstop) + (void)ingetc(); + } else + lexstop = 1; + } /* Outpar lexical token gets added in caller if present */ /* diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 7623051..97c8ba3 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -631,6 +631,14 @@ >; >(( echo 42 + # From parse error on it's not possible to split. + # Just check we get the complete string. + foo='echo $(|||) bar' + print -rl ${(z)foo} +0:$($(z)} with parse error in command substitution. +>echo +>$(|||) bar + psvar=(dog) setopt promptsubst foo='It shouldn'\''t $(happen) to a %1v.'