From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27084 invoked by alias); 3 Jan 2018 17:29:13 -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: 42208 Received: (qmail 2841 invoked by uid 1010); 3 Jan 2018 17:29:13 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net 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(205.235.26.22):SA:0(-1.4/5.0):. Processed in 10.511241 secs); 03 Jan 2018 17:29:13 -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.4 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, SPF_PASS,T_DKIM_INVALID,T_RP_MATCHES_RCVD autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=BPsE=D6=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1515000057; bh=pJdW7tA3XTXerkl56hNups0jJUGjlfEFDXUeU6KbGy4=; h=From:References:To:Subject:Date:From:Subject; b=JjIcpsDExs8mx4dArAeN8H54U+zRuyPdW+FI9mEigcj5QsOJPxKraEhF6uta1lv7qHEJ0e7zq3wZqkEDdRhghIRD5P+3FaHaA/ifiJDkcgH08KiB+Cvq/Z2NAQqUkqKGzccZeSHl6QivK7hC6kf1IQckjgGPn4KjMFAIGUfbuNZuvcxtipl25wJ2zqXSwOTt+pJzQo5LFTmpGUlBonujXhfHBj8AQcgCgK+s3NW6xCeLbVDhj5EWwG2cX35VnmE1yieJNaZY2jzJBL452ODkJpduDNrVQik0ijqXWpFGEix62DvvYO1UsB4TiQVt1UsBC8DotcCvrzbMSzLEJ5hrXg== X-YMail-OSG: 08m5oCoVM1lTFrGWGUmxcB_PTxYaRazHHhC9.q5KLTL.JuCqQBLEY89T1CbUpP9 3I0QpCO_beucmW4MIs4zq3E9QPjDLHKQhUbKOpaa3JXBcVWZBB3xJYqUIWEfxuAOLZUezIcnZCAY AlwaAdYqGt6Mr7.2lvgBz2.9ERnewYaxWGLbsZTGq.C8DaLbyMh82TGUpL6No_5ELaHuXKlMDUvW rxb50KmbzLM4iedQb.cgoYccQsbzFmNlUH_3LzRWVdGQnjEKqg0Yln03TJPWKpT7c0gNJBJYRrHP nxeSDtEKUDsyuD5oRqR2Ri7JwqW0m2FIPKU6zGYEnVrQ6iu2jf.YQU5jWVq9jGU6D65l.5nGAV_u x5PXZqtsuX2.Zj3RT5QG9doXpPzDuHJWbg957LxIhVMTzHTzfgxv0TIDOntcgFDi.sKeDMZZaq8x 9dot6kX9dANaoJO7P5rOuypCvAyVksCQhiL5WUignJRHvTS8dEj193QZkoUK9x3x3OuST In-reply-to: <20171226021740.81700-1-llua@gmx.com> From: Oliver Kiddle References: <20171226021740.81700-1-llua@gmx.com> To: zsh-workers@zsh.org Subject: Re: [PATCH] prevent parameters leaking from various completers MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <13712.1514998807.1@thecus.kiddle.eu> Date: Wed, 03 Jan 2018 18:00:08 +0100 Message-ID: <13713.1514998808@thecus.kiddle.eu> On 25 Dec, Eric Cook wrote: > +++ b/Completion/Unix/Command/_yp > +local curcontext="$curcontext" line state expl ret=1 _yp_cache_nicks _yp_args > if (( ! $+_yp_cache_maps )); then In this particular case, the use of a global variable as a cache was intentional and the change actually breaks _yp completion. Adding typeset -g makes the intention rather clearer. I also would prefer _cache_ as the initial prefix on any such variable making it easier to unset them en masse. Caching _yp_args is fairly pointless. ypwhich is also fairly instant so I'm not sure we gain much by caching that either but perhaps it generates network traffic to the NIS master so I'll leave it for now. It probably was slow enough in 2001 to justify the caching. Oliver PS. This reminds me that I was supposed to cleanup the caching mechanism. I won't, however, have much time for a few weeks. diff --git a/Completion/Unix/Command/_yp b/Completion/Unix/Command/_yp index b7619a02e..efd9aae5f 100644 --- a/Completion/Unix/Command/_yp +++ b/Completion/Unix/Command/_yp @@ -1,25 +1,27 @@ #compdef ypcat ypmatch yppasswd ypwhich ypset ypserv ypbind yppush yppoll ypxfr domainname -local curcontext="$curcontext" line state expl ret=1 _yp_cache_nicks _yp_args +local curcontext="$curcontext" line state expl args ret=1 typeset -A opt_args -if (( ! $+_yp_cache_maps )); then - _yp_cache_maps=( "${(@)${(@f)$(_call_program maps ypwhich -m)}%% *}" ) - _yp_cache_nicks=( "${(@)${(@)${(@f)$(_call_program names ypwhich -x)}#*\"}%%\"*}" ) - _yp_args=( - '(-x)-d[specify domain]:domain name' \ - '(-x)-k[display keys]' \ - '(-x)-t[inhibit nicknames]' \ - '(: -d -k -t)-x[display nicknames]' \ - ) +if (( ! $+_cache_yp_maps )); then + typeset -ga _cache_yp_maps _cache_yp_nicks + _cache_yp_maps=( "${(@)${(@f)$(_call_program maps ypwhich -m)}%% *}" ) + _cache_yp_nicks=( "${(@)${(@)${(@f)$(_call_program names ypwhich -x)}#*\"}%%\"*}" ) fi +args=( + '(-x)-d[specify domain]:domain name' \ + '(-x)-k[display keys]' \ + '(-x)-t[inhibit nicknames]' \ + '(: -d -k -t)-x[display nicknames]' \ +) + case "$service" in ypcat) - _arguments -C -s "$_yp_args[@]" ':map name:->map' && ret=0 + _arguments -C -s $args ':map name:->map' && ret=0 ;; ypmatch) - _arguments -C -s "$_yp_args[@]" '::key map:->keymap' ':map name:->map' && + _arguments -C -s $args '::key map:->keymap' ':map name:->map' && ret=0 ;; yppasswd) @@ -96,9 +98,9 @@ if [[ "$state" = map* ]]; then # The `-M ...' allows `pa.n' to complete to `passwd.byname'. _requested maps expl 'map name' \ compadd -M 'l:.|by=by l:.|=by r:|.=* r:|=*' -a \ - _yp_cache_maps && ret=0 + _cache_yp_maps && ret=0 _requested nicknames expl nicknames \ - compadd -a _yp_cache_nicks && ret=0 + compadd -a _cache_yp_nicks && ret=0 (( ret )) || return 0 done elif [[ "$state" = servers ]]; then