From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24436 invoked by alias); 15 Nov 2015 22:26: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: X-Seq: 37122 Received: (qmail 13817 invoked from network); 15 Nov 2015 22:26:10 -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,T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern_com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version:content-type; bh=qfTZMKL8HaOeRl9a6V9uZEotcAte2SQQUeIruBuqj4M=; b=cB3PaaDgMmq1mb2KnAA6xzA2+cQJqUUpVmOD2wxk8NtufW8Cp1B8Wl9mbuG1th+27C KKIC5dkxzcuM2cxetBrYnT+SMDA28Rv5KsWTLkZBwOwd8wE64yWX+7NUiRh3mIaxLF6G NsUl4TlCg+/K/fhJ+BiNnNTUoP5RqtdkLpW28kAKrwPIoYHQJ6vlqbQORqecKgqNGFh2 x/nOfdmXFtcM5ly31SL6l+O/7swRXTcTe/JjZvwbvF4VA+ZTxOBmtgAE3qpnYdLdo8su JIhVNkxLV6bk3X5r3hXk+FhdQAEYaQAVXDdjuZLuC2KKfniD1Ie3n8d7pRCQJ2bjFPiK DUzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:message-id:date:in-reply-to:comments :references:to:subject:mime-version:content-type; bh=qfTZMKL8HaOeRl9a6V9uZEotcAte2SQQUeIruBuqj4M=; b=hLdu6YS1JMKRVu/WF8ik0ums+NTtfBzPWcj3azIAcyMzqdcyakSMGAlHbvwEu+VL3C PSmwbLge28vzpqPwUa3B/FSkBfCx4tAiS3ao00J7Wz7iNPJAmSxyXEoEleceZDV/gZv+ Ir9xDcSO80zxFGA10JElELbWOVYohgGApX1RSLiLEWjfJPVmy8u6bkHauU8eYXBrq0Lv 8gWsI1UZkO6OTU+e0l2MU1eDDZisx711vFjGoVPJEw6qUfs9Sa2FFPYnMYJCAy+Pu0qR ndc7DUEGpncfbcDpN8ETN6qhslNMRb09CECOkWyByjNyL1Ch8gwcblocnV1oOkeGtBzw B3Sw== X-Gm-Message-State: ALoCoQlwBwG58+0k5JokNyaY3Q+OFVXJ51DVoJy7agHPNDHqqBbcItt+lTjznsfAIneg2nkAilgN X-Received: by 10.202.53.195 with SMTP id c186mr18219790oia.43.1447626366955; Sun, 15 Nov 2015 14:26:06 -0800 (PST) From: Bart Schaefer Message-Id: <151115142603.ZM20567@torch.brasslantern.com> Date: Sun, 15 Nov 2015 14:26:03 -0800 In-Reply-To: <151115135218.ZM25449@torch.brasslantern.com> Comments: In reply to Bart Schaefer "Re: Bug in alias expansion" (Nov 15, 1:52pm) References: <20151115200356.0f3a80a2@ntlworld.com> <151115135218.ZM25449@torch.brasslantern.com> X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: zsh-workers@zsh.org Subject: Re: Bug in alias expansion MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Nov 15, 1:52pm, Bart Schaefer wrote: } } So the real question may be, how did we get as far as execsimple() } without having expanded all the aliases first? Without being able to answer that ... we can work around the issue by shoving alias expansion down into parse_string() like so: diff --git a/Src/exec.c b/Src/exec.c index c0ee527..b1ca551 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -217,6 +217,11 @@ parse_string(char *s, int reset_lineno) { Eprog p; zlong oldlineno; + int noalias = noaliases; + + /* See addvars() */ + if (noaliases < 0) + noaliases = 0; zcontext_save(); inpush(s, INP_LINENO, NULL); @@ -231,6 +236,7 @@ parse_string(char *s, int reset_lineno) strinend(); inpop(); zcontext_restore(); + noaliases = noalias; return p; } @@ -2249,10 +2255,15 @@ static void addvars(Estate state, Wordcode pc, int addflags) { LinkList vl; + int noalias = noaliases; int xtr, isstr, htok = 0; char **arr, **ptr, *name; int flags; + /* Signal to parse_string() that it should expand aliases */ + if (!noaliases) + noaliases = -1; + Wordcode opc = state->pc; wordcode ac; local_list1(svl); @@ -2291,10 +2302,8 @@ addvars(Estate state, Wordcode pc, int addflags) if (vl && htok) { prefork(vl, (isstr ? (PREFORK_SINGLE|PREFORK_ASSIGN) : PREFORK_ASSIGN), NULL); - if (errflag) { - state->pc = opc; - return; - } + if (errflag) + break; if (!isstr || (isset(GLOBASSIGN) && isstr && haswilds((char *)getdata(firstnode(vl))))) { globlist(vl, 0); @@ -2305,10 +2314,8 @@ addvars(Estate state, Wordcode pc, int addflags) if (isset(GLOBASSIGN) && isstr) unsetparam(name); } - if (errflag) { - state->pc = opc; - return; - } + if (errflag) + break; } if (isstr && (empty(vl) || !nextnode(firstnode(vl)))) { Param pm; @@ -2331,8 +2338,7 @@ addvars(Estate state, Wordcode pc, int addflags) (pm->node.flags & PM_RESTRICTED)) { zerr("%s: restricted", pm->node.nam); zsfree(val); - state->pc = opc; - return; + break; } if (strcmp(name, "STTY") == 0) { zsfree(STTYval); @@ -2346,10 +2352,8 @@ addvars(Estate state, Wordcode pc, int addflags) opts[ALLEXPORT] = allexp; } else pm = assignsparam(name, val, myflags); - if (errflag) { - state->pc = opc; - return; - } + if (errflag) + break; continue; } if (vl) { @@ -2377,6 +2381,7 @@ addvars(Estate state, Wordcode pc, int addflags) } } state->pc = opc; + noaliases = noalias; } /**/