From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11230 invoked by alias); 23 Mar 2017 02:03:07 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 22601 Received: (qmail 28299 invoked from network); 23 Mar 2017 02:03:06 -0000 X-Qmail-Scanner-Diagnostics: from mailout2.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.12):SA:0(-5.0/5.0):. Processed in 4.735584 secs); 23 Mar 2017 02:03:06 -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=-5.0 required=5.0 tests=RCVD_IN_DNSWL_HI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,RP_MATCHES_RCVD,SPF_HELO_PASS 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: cbfec7f5-f79d06d000004445-ab-58d2494e05f5 Date: Wed, 22 Mar 2017 09:52:12 +0000 From: Peter Stephenson To: zsh-users@zsh.org Subject: Re: How to substitute empty array element, or empty string Message-id: <20170322095212.2ff2dec8@pwslap01u.europe.root.pri> In-reply-to: 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=UTF-8 Content-transfer-encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djP87r+npciDN72MVvsOLmS0YHRY9XB D0wBjFFcNimpOZllqUX6dglcGS8enWEpaBCoOLjiMXsD43PuLkZODgkBE4mGz6dZIWwxiQv3 1rN1MXJxCAksZZRYsuIgI4TTzSSx7tcq9i5GDrCO33/zIeLLGCWetdxggXCmMEkcWXeFGcI5 wyhxte8N1KyzjBIXrp1mBFnCIqAqMfXeCzYQm03AUGLqptlgcREBUYnlKzaDrRAWcJa4ssoE JMwrYC9xvvMqE4jNKWAl8X/jAXYQm19AX+Lq309MEHfbS8y8coYRol5Q4sfkeywgNrOApsTW 3evZIWxtiSfvLkD92c4usXK1G8Q3shKbDjBDhF0k5jxeDWULS7w6voUdwpaRuDy5mwXC7meU eNLtC/KWhMAMRonTZ3awQSSsJfpuX2SE2MUnMWnbdGaI+bwSHW1CECUeEj8afjJC2I4Sz/Yv Z53AqDgLydWzkFw9C8nVCxiZVzGKpJYW56anFpvqFSfmFpfmpesl5+duYgQmgdP/jn/dwbj0 mNUhRgEORiUeXgX5ixFCrIllxZW5hxglOJiVRHiTHC9FCPGmJFZWpRblxxeV5qQWH2KU5mBR Eufds+BKuJBAemJJanZqakFqEUyWiYNTqoGRMWP1wjjeE7VPue/01r7aVpFWcWK6+oRbu/Pa K58cnXF04c0rAZc2r7uo+HNeQWXnJf9mC/vze4vqBLcICDzaoaJgsMK8wo3x2FOrO+kH5ied +it4WE3Twe6k3YTDT6xO9Qf8NPmce62h9eYm4X2OfQZJ39V38IRtj5e6V5lc8Xn1zousfy6q KrEUZyQaajEXFScCALR/ddr+AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRmVeSWpSXmKPExsVy+t/xK7qxnpciDNY3aFvsOLmS0YHRY9XB D0wBjFFuNhmpiSmpRQqpecn5KZl56bZKoSFuuhZKCnmJuam2ShG6viFBSgpliTmlQJ6RARpw cA5wD1bSt0twy3jx6AxLQYNAxcEVj9kbGJ9zdzFycEgImEj8/pvfxcgJZIpJXLi3nq2LkYtD SGAJo8SBDweZQBJCAtOYJJ4/lIRInGOUaP24mQnCOcsoseTWZWaQKhYBVYmp916wgdhsAoYS UzfNZgSxRQREJZav2MwOsk1YwFniyioTkDCvgL3E+c6rYAs4Bawk/m88wA4xs59RYvGew6wg CX4BfYmrfz8xQZxnLzHzyhlGiGZBiR+T77GA2MwC6hKT5i1ihrC1JZ68u8AKcbW6xI27u9kn MArPQtIyC0nLLCQtCxiZVzGKpJYW56bnFhvpFSfmFpfmpesl5+duYgTG0LZjP7fsYOx6F3yI UYCDUYmHV0H+YoQQa2JZcWXuIUYJDmYlEd4kx0sRQrwpiZVVqUX58UWlOanFhxhNgQEzkVlK NDkfGN95JfGGJobmloZGxhYW5kZGSuK8Uz9cCRcSSE8sSc1OTS1ILYLpY+LglGpg5Gm6mx0n l5JUxZCe/a26fM9yt8mri83rQmV/KVVPiaoUnvCD++jWn/XefYwPuxmXrtz27Z7cNq++lZeM 1+30fLRROq6qcMuGQ1dbNhTefSE2L1+p5MdMn4iuKcuZhUMr8suUl97Lzk/zU4vZ65s720Oo XX5/n8jHCpETXyY6/+zdy60c6BmtxFKckWioxVxUnAgAwmGTWbcCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170322095214eucas1p155ca710930d01d54640589e9e0914898 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 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: 20170322075332epcas3p4a32050e48ad0f94be13134b560f17715 X-RootMTR: 20170322075332epcas3p4a32050e48ad0f94be13134b560f17715 References: On Wed, 22 Mar 2017 08:52:09 +0100 Sebastian Gniazdowski wrote: > Hello, > following does not work as expected: >=20 > % a=3D( a "" c ); print -rl -- "${(@)a//*/x}=E2=80=9D > x >=20 > x This might be one of those "bug" things you sometimes read about for other projects... I believe I've sent the version that doesn't loop infinitely. Other cases in igetmatch() may need adaption. pws diff --git a/Src/glob.c b/Src/glob.c index 0fcb4e1..9ac0ae6 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -2969,7 +2969,7 @@ igetmatch(char **sp, Patprog p, int fl, int n, char *= replstr, do { /* loop over all matches for global substitution */ matched =3D 0; - for (; t < send; ioff++) { + for (; t <=3D send; ioff++) { /* Find the longest match from this position. */ set_pat_start(p, t-s); if (pattrylen(p, t, umlen, 0, &patstralloc, ioff)) { @@ -3018,15 +3018,19 @@ igetmatch(char **sp, Patprog p, int fl, int n, char= *replstr, * which is already marked for replacement. */ matched =3D 1; + if (t =3D=3D send) + break; while (t < mpos) { ioff++; umlen -=3D iincchar(&t, send - t); } break; } + if (t =3D=3D send) + break; umlen -=3D iincchar(&t, send - t); } - } while (matched); + } while (matched && t < send); /* * check if we can match a blank string, if so do it * at the start. Goodness knows if this is a good idea diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index cb9d50d..99f7dd9 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -2148,3 +2148,13 @@ F:behavior, see http://austingroupbugs.net/view.php?= id=3D888 [[ ${-} =3D [[:alnum:]]## ]] || print Failed 2 } 0:$- expansion correctly handles Dash token + + a=3D(1 "" 3) + print -rl -- "${(@)a//*/x}" + a=3D"" + print -rl -- "${(@)a//*/y}" +0:Zero-length string match in parameter substitution +>x +>x +>x +>y