From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8362 invoked by alias); 25 Nov 2015 10:26:19 -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: 20991 Received: (qmail 2105 invoked from network); 25 Nov 2015 10:26:18 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=N3meTd8U9ZKtILY5np9CNrqsEVeQgjAL7ObPqm5Okic=; b=Kv33rBK1NHagVG1v82FEVJYrelqWFlshp+swoooTyQQUg9EczoGPZbjZDzNhHcZy5/ GFBbznmDpHM27Y66D/jurmgC6SvlFEPnSbOAK+8Sb4eaz0BxWQXgQ8NnVglbbkGAxM8Y FCzsbPkZ0a+Z8N2yyacTYL1prFKzQBIRlaLiC73T9bKk4lPKzXn2/wIkgGnCzlSkHKbd UWOvC5FlpIqV6PZodwHvLir95f5XApyF4iN3WCNU0qeZP2+zUgJuDUOn6T1HynpR78eY 82e61Jqw9tIN8iQzCvNbcmKp/lPt9rQK3U1lFU4mO+gYe1eUOcjFiv1tDs4eNqbEpA5M VM+A== MIME-Version: 1.0 X-Received: by 10.28.51.135 with SMTP id z129mr3379356wmz.19.1448445530175; Wed, 25 Nov 2015 01:58:50 -0800 (PST) In-Reply-To: References: Date: Wed, 25 Nov 2015 16:58:50 +0700 Message-ID: Subject: Re: [Zsh bug] function define bug From: Cuong Manh Le To: =?UTF-8?B?TmfDtCBIdXk=?= Cc: Matthew Martin , Zsh Users Content-Type: multipart/alternative; boundary=001a1144424e4d817605255a8137 --001a1144424e4d817605255a8137 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Huy, See this commit https://github.com/zsh-users/zsh/commit/b4a198cdda3d499af4e2b4f4a2279f98c8d= 07433 for an example usage. Best. On Wed, Nov 25, 2015 at 4:39 PM, Ng=C3=B4 Huy wrote= : > Dear Cuong, > > 2015-11-25 16:20 GMT+07:00 Cuong Manh Le : > >> Hi Huy, >> >> It's a good point, but in the user perspective, turn off `multifuncdef` >> is not much useful: >> >> $ unsetopt multifuncdef >> $ echo 1 | grep foobar(){ echo 1; } >> zsh: parse error near `()' >> >> You still stuck and can not use `grep`. >> >> The right way to use it from the beginning is quote the grep string >> pattern if it contains any shell meta characters. >> >> Also in zsh documentation >> http://zsh.sourceforge.net/Doc/Release/Options.html#index-MULTIFUNCDEF , >> it said that: >> >> Multiple function definitions are not often used and can cause obscure >>> errors. >> >> >> Maybe we should add an example to that section. >> >> Best. >> >> >> >> On Wed, Nov 25, 2015 at 4:03 PM, Ng=C3=B4 Huy wr= ote: >> >>> Dear Cuong, >>> >>> 2015-11-25 15:49 GMT+07:00 Cuong Manh Le : >>> >>>> Hi Severus, >>>> >>>> Can you give a demo? >>>> >>>> You can turn off `mult=C3=AC_func_def` but you can always do multiple >>>> function definition with reserved word `function` >>>> >>>> Best. >>>> >>>> >>>> On Wed, Nov 25, 2015 at 11:20 AM, Ng=C3=B4 Huy >>>> wrote: >>>> >>>>> Dear Matthew >>>>> >>>>> 2015-11-25 11:06 GMT+07:00 Matthew Martin : >>>>> >>>>> > On Tue, Nov 24, 2015 at 9:46 PM, Ng=C3=B4 Huy >>>>> wrote: >>>>> > > Dear folks, >>>>> > > >>>>> > > I found the problem in zsh define function. Demo >>>>> > > >>>>> > > ls test() { echo "Bug !!!"} && ls && test >>>>> > > >>>>> > > it will print >>>>> > > >>>>> > > Bug !!! >>>>> > > Bug !!! >>>>> > >>>>> > >>>>> > That's expected behaviour. Since MULTI_FUNC_DEF is set by default i= n >>>>> zsh >>>>> > mode, both ls and test are being defined as functions with the body >>>>> > echo "Bug !!!". >>>>> > >>>>> > % func1 func2 () { echo This is "$0"; } >>>>> > % func1; func2 >>>>> > This is func1 >>>>> > This is func2 >>>>> > % which func{1,2} >>>>> > func1 () { >>>>> > echo This is "$0" >>>>> > } >>>>> > func2 () { >>>>> > echo This is "$0" >>>>> > } >>>>> > % unsetopt MULTI_FUNC_DEF >>>>> > % func1 func2 () { echo This is "$0"; } >>>>> > zsh: parse error near `()' >>>>> > >>>>> >>>>> I know this behavior likes advanced programming language but >>>>> mult=C3=AC_func_def >>>>> should be turned off by default, it leads to risky problem when someo= ne >>>>> searchs as grep, ls malicious strings without quote >>>>> >>>>> >>>>> Kind regards, >>>>> Severus >>>>> >>>> >>>> this's just example: cat file | grep foobar(){ rm -rf *} >>> grep wil execute rest of body >>> >>> Kind regards, >>> Severus >>> >> >> I don't see any case we should use multiple function definition. We also > can not cover all problems with this behavior. I think we should disable = it > :) > > Kind regards, > Severus > --001a1144424e4d817605255a8137--