From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28459 invoked by alias); 18 Jan 2018 21:58:11 -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: List-Unsubscribe: X-Seq: 42297 Received: (qmail 3139 invoked by uid 1010); 18 Jan 2018 21:58:11 -0000 X-Qmail-Scanner-Diagnostics: from mail-io0-f171.google.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(209.85.223.171):SA:0(-1.9/5.0):. Processed in 9.867675 secs); 18 Jan 2018 21:58:11 -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=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, SPF_PASS,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1 X-Envelope-From: dana@dana.is X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dana-is.20150623.gappssmtp.com; s=20150623; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=osHLMDjNQf2OgY4LtGKcU5vychvkdEUcMhfCmXx/FGA=; b=BtakSCzY42ZkIhbYA/l3+MDsm/whn3zoEe99u3hhRnn81gGa9MI7IM+5sZ9sajSchW pVFij+OvmYU9JXHa0ICh2yx6+kCp7yA1z0hh+iTP+jASj/RPpP1J6im3Okm5vhb4rYYj pDrFWQC9lxo0cGLACcdV9pMsRaFAojKXAB01CZBzfeRpOFgW8lzyxqaKXvmwE3LE+WQH ksfoPrNyvCJeImnhrZb1+EP38vHs93eLdm2daI+kmq1Rg/C0SuoXFSO8kxy8l4Qfn16B /vhe0ONewMjJNPljlqpBkyCcrWqJJkYTk8VuZzPNhShfmfN6zx/Bomc+w8+7RibNJjzT 9BWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=osHLMDjNQf2OgY4LtGKcU5vychvkdEUcMhfCmXx/FGA=; b=NFcWy5Smaa9N0NgF2IcxNUiQgBaRdKANqYeP53nS+wy7GtxYdxy47H3t7net97ggeP GONW6GyiHuXr6pdNAPm6q8GozUoZbkua4JJHY8jXM8XXMAj5V2KFgXqAlNkaRNCudSE3 0TI9gi9PwRg9SD2vQfcNPFxyozY0V6b/gzXPhY/1F5MwOgp/gGY84be/rXuAI7f5wCRg e5o+wHDBtgj77+bXH22wgHKuiB819DAli1/z2ILxzMpNZgMtSt09g2iJfYosZ7IRf9Kd XExqdeiRgStijLj1ETNdwyC/kjGfa5NlCILb8Td/A/07hxJk/Zr9pEIn7+LKQbUlG35v TrFw== X-Gm-Message-State: AKwxytfgf+KkijBDS1RH2au9pcKh/j+dzmNvZbt2j4sXOdlamZsV+ZmG 7BRWaUIhVI3T6ztYgKXSRQpiHHHoVX0= X-Google-Smtp-Source: ACJfBosh30w25AVgyY2b1uFgDbQF0pCj2YWaMV3LJ8L8VhkcQHLKSS4t3SZITVmmxNR/JU3jxGINoQ== X-Received: by 10.107.200.11 with SMTP id y11mr11699546iof.116.1516312677927; Thu, 18 Jan 2018 13:57:57 -0800 (PST) From: dana Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\)) Subject: [PATCH] Fix (e) subscript parameter used in scalar context Message-Id: <087F6EC8-F0D8-4BAF-A457-8510BB334D97@dana.is> Date: Thu, 18 Jan 2018 15:57:56 -0600 To: zsh-workers@zsh.org X-Mailer: Apple Mail (2.3273) Someone on IRC (i forget who) found that the (e) subscript parameter = doesn't behave as expected when used with scalars: % a=3D'foo?bar' % print $a[(ei)?] 8 # should be 4 This is apparently because an implicit * is added to the beginning/end = of the pattern in scalar context, and it's left untokenised when (e) is used. The way i did this feels a bit redundant, but it fixes it anyway. dana diff --git a/Src/params.c b/Src/params.c index de7730ae7..062df733d 100644 --- a/Src/params.c +++ b/Src/params.c @@ -1513,7 +1513,7 @@ getarg(char **str, int *inv, Value v, int a2, = zlong *w, } } } else { - if (!v->isarr && !word) { + if (!v->isarr && !word && !quote_arg) { l =3D strlen(s); if (a2) { if (!l || *s !=3D '*') { @@ -1532,9 +1532,23 @@ getarg(char **str, int *inv, Value v, int a2, = zlong *w, } } if (!keymatch) { - if (quote_arg) + if (quote_arg) { untokenize(s); - else + // Scalar (e) needs implicit asterisk tokens + if (!v->isarr && !word) { + l =3D strlen(s); + d =3D (char *) hcalloc(l + 2); + if (a2) { + *d =3D Star; + strcpy(d + 1, s); + } else { + strcpy(d, s); + d[l] =3D Star; + d[l + 1] =3D '\0'; + } + s =3D d; + } + } else tokenize(s); remnulargs(s); pprog =3D patcompile(s, 0, NULL); diff --git a/Test/D06subscript.ztst b/Test/D06subscript.ztst index f0a858b1c..3ea7fb7e4 100644 --- a/Test/D06subscript.ztst +++ b/Test/D06subscript.ztst @@ -273,3 +273,19 @@ print ${string[1,twoarg(1,4)]} 0:Commas inside parentheses do not confuse subscripts >abc + + string=3D'foobarbaz foob?rbaz foob?rbaz' + print $string[(i)b?r] $string[(I)b?r] + print $string[(r)b?r] $string[(R)b?r] + print $string[(r)b?r,(R)b?r] + print $string[(ei)b?r] $string[(eI)b?r] + print $string[(er)b?r] $string[(eR)b?r] + print $string[(er)b?r,(eR)b?r] +0:Pattern handling with scalars +F:Regression test for workers/42297 +>4 24 +>b b +>barbaz foob?rbaz foob?r +>14 24 +>b b +>b?rbaz foob?r