From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id c2339b02 for ; Wed, 14 Aug 2019 14:05:24 +0000 (UTC) Received: (qmail 15107 invoked by alias); 14 Aug 2019 14:05:15 -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: 44664 Received: (qmail 2271 invoked by uid 1010); 14 Aug 2019 14:05:15 -0000 X-Qmail-Scanner-Diagnostics: from mailout1.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.2/25538. spamassassin: 3.4.2. Clear:RC:0(210.118.77.11):SA:0(-7.0/5.0):. Processed in 2.086946 secs); 14 Aug 2019 14:05:15 -0000 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.samsung.com designates 210.118.77.11 as permitted sender) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190814140436euoutp01065393f3b8623d551384c12446519f49~6zw04nxIf1138111381euoutp01i DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1565791476; bh=b9uAfATFoASHooJrb49QHRilfH9Z/wPIyGI9BON3198=; h=Subject:From:To:Date:In-Reply-To:References:From; b=E3JPm8HP4frWjwQT2GuWUxXic9UxTD1JhI+aOq9qpcDJs/0Owfk9e+8RnnDd7tdLN BWuBMeOTWLZp9yqMsBybkmN3V2tRWMl5h2PljNVyTtwkPCRpCoaxXReMBCWkbv3tGu ziOYN2mWHlm2qSeXmarT0ngnioU6Dqnhi2GWetls= X-AuditID: cbfec7f2-54fff70000001175-b4-5d5414f386bf Message-ID: <1565791473.4796.6.camel@samsung.com> Subject: Re: Bug Report: Variable becomes unset without reason From: Peter Stephenson To: Date: Wed, 14 Aug 2019 15:04:33 +0100 In-Reply-To: <20190814093748.u3pkdzrixmtunnt7@chaz.gmail.com> X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrAIsWRmVeSWpSXmKPExsWy7djPc7qfRUJiDVYvlrQ42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGR8+v2MqeCpQ0X1+F3MD4xfeLkZODgkBE4kXF/+xdzFycQgJ rGCU+HhvE5TTxyRx98NXVginl0ni+fG7zDAtR06thKpazihx9v88RriqV1uPQzlnGCW+rvjK AuFcYJToP7OYDaSfV8BQom/WUrBZwgJ2Eh+2/2UEsdmA4lM3zQazRQQkJa41nwazWQRUJeZd OcEOYnMK2Epsv/mCDeIODYkNN48xQcwUlDg58wkLiM0sIC/RvHU2M8hiCYH7bBL3V+xigWhw keg99JARwhaWeHV8CzuELSNxenIPC0RDO6PEmkmv2SGcHkaJTUfvQHVYS/TdvghkcwCt0JRY v0sfIuwoseNTEytIWEKAT+LGW0GII/gkJm2bzgwR5pXoaBOCqFaT2NG0lREiLCPxdI3CBEal WUg+mIXkg1kIqxYwMq9iFE8tLc5NTy02zEst1ytOzC0uzUvXS87P3cQITAen/x3/tIPx66Wk Q4wCHIxKPLwBW4JihVgTy4orcw8xSnAwK4nwTrgIFOJNSaysSi3Kjy8qzUktPsQozcGiJM5b zfAgWkggPbEkNTs1tSC1CCbLxMEp1cA4/5fd6srnZnfap/5n4TucxjdRK/X+x3l+0yXvFIdu +1RVdSLNX3e923n2E3dN8y2flS7W92j4bbThzfsHgpdW9sxYuGEq/z+GP4fFA3/s4xR7fdqr rk1HNF++TH/Juf95n3/+7mg03r6rUUdrL+dX3jcn388OFF04acYMD81Llm/mLuEty9y1XYml OCPRUIu5qDgRALrVj6EDAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpikeLIzCtJLcpLzFFi42I5/e/4Xd1PIiGxBjcuaFgcbH7I5MDoserg B6YAxig9m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy1CJ9uwS9 jA+f3zEVPBWo6D6/i7mB8QtvFyMnh4SAicSRUyvZuxi5OIQEljJKNFy/wA6RkJH4dOUjlC0s 8edaFxuILSTQzSSxu0MPouEMo8SCyQcZIZwLjBJXln1iAaniFTCU6Ju1lBnEFhawk/iw/S8j iM0GFJ+6aTaYLSIgKXGt+TSYzSKgKjHvygmwbZwCthLbb75ggxh6jFHiQPc0sKHMApoSrdt/ Q52kIbHh5jEmiGWCEidnPoGqkZdo3jqbeQKj0CwkLbOQlM1CUraAkXkVo0hqaXFuem6xkV5x Ym5xaV66XnJ+7iZGYPhvO/Zzyw7GrnfBhxgFOBiVeHgDtgTFCrEmlhVX5h5ilOBgVhLhnXAR KMSbklhZlVqUH19UmpNafIjRFOijicxSosn5wNjMK4k3NDU0t7A0NDc2NzazUBLn7RA4GCMk kJ5YkpqdmlqQWgTTx8TBKdXAWK3x9t0WZqnp1UUCD9U39E5SPfMlIuWYtYkWl8fuLb9UsoUM oj89tBbIk8ur4NzQFnbfc4t2n/zsqVejuyJc9jTvzzzH8UvQNHX/N7Z0VulVbicm5NyqUn3H zuFhtmJehf+ZL3O7NRvTumb6f+d86Ls02VzhtMOc0K5PH+WV07Mnsaq4M9xRYinOSDTUYi4q TgQAijrTJpUCAAA= X-CMS-MailID: 20190814140434eucas1p1b1b0d943f77885d61336b0d1f3249e90 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20190814093844epcas2p44f875d2a2dd79067539d55e34fed4ae2 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190814093844epcas2p44f875d2a2dd79067539d55e34fed4ae2 References: <2154283D-97B8-436B-8CC5-40624C11F356@icloud.com> <20190814093748.u3pkdzrixmtunnt7@chaz.gmail.com> On Wed, 2019-08-14 at 10:37 +0100, Stephane Chazelas wrote: > 2019-08-08 20:38:05 +0430, Aryn Starr: > Now, that being said, as discussed on U&L it looks like a bug > indeed and a shorter reproducer is: >  > $ zsh -xc 'v=1; f() { local v; v=2 true; }; f; typeset -p v' > +zsh:1> v=1 > +zsh:1> f > +f:0> local v > +f:0> v=2 +f:0> true > +zsh:1> typeset -p v > zsh:typeset:1: no such variable: v >  > Most likely, that's the "v=2 true" (where "true" is a builtin) that ends up > unsetting the "v" from the global scope. Yes, the saved version of "v" that we restore after the builtin is missing the pointer back to the version of v in the enclosing scope.  So it's not only not shown as set, it will leak memory. This simply preserves that pointer in the copy, but this assumes we've correctly blocked off the old parameter from being altered inside the function scope --- if we haven't that preserved old pointer is going to get us into trouble.  However, if we haven't that's already a bug, so this shouldn't make things worse. pws diff --git a/Src/params.c b/Src/params.c index 1499e3a40..a253a9d8e 100644 --- a/Src/params.c +++ b/Src/params.c @@ -1124,8 +1124,10 @@ copyparam(Param tpm, Param pm, int fakecopy)      tpm->base = pm->base;      tpm->width = pm->width;      tpm->level = pm->level; -    if (!fakecopy) +    if (!fakecopy) { + tpm->old = pm->old;   tpm->node.flags &= ~PM_SPECIAL; +    }      switch (PM_TYPE(pm->node.flags)) {      case PM_SCALAR:   tpm->u.str = ztrdup(pm->gsu.s->getfn(pm)); diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index 194c3e287..b6e85a9fe 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -2522,3 +2522,15 @@ F:behavior, see http://austingroupbugs.net/view.php?id=888  >trailing/slashes  >removed  >are/removed + + foo=global-value + fn() { +    local foo=function-value +    foo=export-value true +    print $foo + } + fn + print $foo +0:Global variables are not trashed by "foo=bar builtin" (regression test) +>function-value +>global-value