[PATCH] Don't export hidden parameters
Philippe Altherr <[email protected]> Sun, 19 Jul 2026 15:02:53 +0200
| Newsgroups | gmane.comp.shells.zsh.devel |
|---|---|
| Message-ID | <CAGdYchuCjB+y=ekYnbb-daj1hkd8jdDTsBiBT=UhDPdUGM0R8Q@mail.gmail.com> |
--0000000000000f82640656f6696c
Content-Type: multipart/alternative; boundary="0000000000000f82610656f6696a"
--0000000000000f82610656f6696a
Content-Type: text/plain; charset="UTF-8"
Whenever an -x flagged parameter is updated, the precomputed environment
must be updated. However, if the updated -x flagged parameter is hidden by
a same name local parameter, then the -x flagged parameter is not supposed
to show up in the environment and therefore no environment update should be
performed.
There are currently two ways to update hidden parameters. In both cases,
the current implementation wrongly updates the precomputed environment with
an entry that shouldn't be there.
One way relies on references:
% export VAR=foo
% typeset -n ref=VAR;
% () { local VAR=hide; ref=bar; printenv VAR }
bar
The other one relies on tied parameters:
% export -T VAR=aa:bb var
% () { local -x VAR=foo; var=(cc dd); printenv VAR }
cc
Some combinations of references and tied parameters require additional
changes (see tests in the patch).
- Don't export hidden parameters
<https://github.com/zsh-users/zsh/compare/master...paltherr:zsh:dont-export-hidden-parameters>
The steps in the GitHub patch exhibit why each change is needed.
Philippe
--0000000000000f82610656f6696a
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Whenever an -x flagged parameter is updated, the precomput=
ed environment must be updated. However, if the updated -x flagged paramete=
r is hidden by a same name local parameter, then the -x flagged parameter i=
s not supposed to show up in the environment and therefore no environment u=
pdate should be performed.<div><br></div><div>There are currently two ways =
to update hidden parameters. In both cases, the current implementation wron=
gly updates the precomputed environment with an entry that shouldn't be=
there.</div><div><br></div><div>One way relies on references:</div><div><b=
r></div><div><font face=3D"monospace">% export VAR=3Dfoo</font></div><div><=
font face=3D"monospace">% typeset -n ref=3DVAR;</font></div><div><font face=
=3D"monospace">% () { local VAR=3Dhide; ref=3Dbar; printenv VAR }</font></d=
iv><div><font face=3D"monospace">bar</font></div><div><br></div><div><div>T=
he other one relies on tied parameters:</div><div><br></div><div><font face=
=3D"monospace">% export -T VAR=3Daa:bb var</font></div><div><font face=3D"m=
onospace">% () { local -x VAR=3Dfoo; var=3D(cc dd); printenv VAR }</font></=
div><div><font face=3D"monospace">cc</font></div><div><br></div></div><div>=
Some combinations of references and tied parameters require additional chan=
ges (see tests in the patch).<br><div><br></div><div><div>-=C2=A0<a href=3D=
"https://github.com/zsh-users/zsh/compare/master...paltherr:zsh:dont-export=
-hidden-parameters">Don't export hidden parameters</a></div><div><br></=
div><div>The steps in the GitHub patch exhibit why each change is needed.</=
div><div><br></div><div>Philippe</div><div><br></div></div></div></div>
--0000000000000f82610656f6696a--
--0000000000000f82640656f6696c
Content-Type: text/plain; charset="US-ASCII"; name="dont-export-hidden-parameters.txt"
Content-Disposition: attachment;
filename="dont-export-hidden-parameters.txt"
Content-Transfer-Encoding: base64
Content-ID: <f_mrrsg52f0>
X-Attachment-Id: f_mrrsg52f0
ZGlmZiAtLWdpdCBhL1NyYy9idWlsdGluLmMgYi9TcmMvYnVpbHRpbi5jCmluZGV4IDJlM2U1NzUy
YS4uN2ExOWMwNTFhIDEwMDY0NAotLS0gYS9TcmMvYnVpbHRpbi5jCisrKyBiL1NyYy9idWlsdGlu
LmMKQEAgLTIyNjIsMTQgKzIyNjIsMTQgQEAgdHlwZXNldF9zaW5nbGUoY2hhciAqY25hbWUsIGNo
YXIgKnBuYW1lLCBQYXJhbSBwbSwgaW50IGZ1bmMsCiAJCQl4ID0gemFycmR1cCh4KTsKIAkJICAg
ICgqcG0tPmdzdS5hLT5zZXRmbikocG0sIHgpOwogCQl9IGVsc2UgaWYgKHBtLT5lbmFtZSAmJiB4
KQotCQkgICAgYXJyZml4ZW52KHBtLT5lbmFtZSwgeCk7CisJCSAgICBhcnJmaXhlbnYoTlVMTCwg
cG0sIHgpOwogCSAgICB9IGVsc2UgaWYgKFBNX1RZUEUocG0tPm5vZGUuZmxhZ3MpID09IFBNX1ND
QUxBUiAmJiBwbS0+ZW5hbWUgJiYKIAkJICAgICAgIChhcG0gPQogCQkJKFBhcmFtKSBwYXJhbXRh
Yi0+Z2V0bm9kZShwYXJhbXRhYiwgcG0tPmVuYW1lKSkpIHsKIAkJeCA9ICgqYXBtLT5nc3UuYS0+
Z2V0Zm4pKGFwbSk7CiAJCXVuaXFhcnJheSh4KTsKIAkJaWYgKHgpCi0JCSAgICBhcnJmaXhlbnYo
cG0tPm5vZGUubmFtLCB4KTsKKwkJICAgIGFycmZpeGVudihwbSwgTlVMTCwgeCk7CiAJICAgIH0K
IAl9CiAJaWYgKE9QVF9JU1NFVChvcHMsJ3AnKSkgewpAQCAtMjI5Miw3ICsyMjkyLDggQEAgdHlw
ZXNldF9zaW5nbGUoY2hhciAqY25hbWUsIGNoYXIgKnBuYW1lLCBQYXJhbSBwbSwgaW50IGZ1bmMs
CiAJfQogCWlmICghKHBtLT5ub2RlLmZsYWdzICYgKFBNX0FSUkFZfFBNX0hBU0hFRCkpKSB7CiAJ
ICAgIGlmIChwbS0+bm9kZS5mbGFncyAmIFBNX0VYUE9SVEVEKSB7Ci0JCWlmICghKHBtLT5ub2Rl
LmZsYWdzICYgUE1fVU5TRVQpICYmICFwbS0+ZW52ICYmICFBU0dfVkFMVUVQKGFzZykpCisJCWlm
ICghKHBtLT5ub2RlLmZsYWdzICYgUE1fVU5TRVQpICYmCisJCSAgICAhcG0tPmVudiAmJiAhQVNH
X1ZBTFVFUChhc2cpICYmICFpc2hpZGRlbihwbSkpCiAJCSAgICBhZGRlbnYocG0sIGdldHNwYXJh
bShwbmFtZSkpOwogCSAgICB9IGVsc2UgaWYgKHBtLT5lbnYgJiYgIShwbS0+bm9kZS5mbGFncyAm
IFBNX0hBU0hFTEVNKSkKIAkJZGVsZW52KHBtKTsKZGlmZiAtLWdpdCBhL1NyYy9wYXJhbXMuYyBi
L1NyYy9wYXJhbXMuYwppbmRleCBlMTExYjI4YzcuLjcwMGRmMWM0NyAxMDA2NDQKLS0tIGEvU3Jj
L3BhcmFtcy5jCisrKyBiL1NyYy9wYXJhbXMuYwpAQCAtMjgzOCw3ICsyODM4LDggQEAgYXNzaWdu
c3RydmFsdWUoVmFsdWUgdiwgY2hhciAqdmFsLCBpbnQgZmxhZ3MpCiAJICAhKGlzc2V0KEFMTEVY
UE9SVCkgJiYgISh2LT5wbS0+bm9kZS5mbGFncyAmIFBNX0hBU0hFTEVNKSkpIHx8CiAJICh2LT5w
bS0+bm9kZS5mbGFncyAmIFBNX0FSUkFZKSB8fCB2LT5wbS0+ZW5hbWUpKQogCXJldHVybjsKLSAg
ICBleHBvcnRfcGFyYW0odi0+cG0pOworICAgIGlmICghaXNoaWRkZW4odi0+cG0pKQorCWV4cG9y
dF9wYXJhbSh2LT5wbSk7CiB9CiAKIC8qKi8KQEAgLTQwMjcsNyArNDAyOCw3IEBAIGFycnNldGZu
KFBhcmFtIHBtLCBjaGFyICoqeCkKIAl1bmlxYXJyYXkoeCk7CiAgICAgLyogQXJyYXlzIHRpZWQg
dG8gY29sb24tYXJyYXlzIG1heSBuZWVkIHRvIGZpeCB0aGUgZW52aXJvbm1lbnQgKi8KICAgICBp
ZiAocG0tPmVuYW1lICYmIHgpCi0JYXJyZml4ZW52KHBtLT5lbmFtZSwgeCk7CisJYXJyZml4ZW52
KE5VTEwsIHBtLCB4KTsKIH0KIAogLyogRnVuY3Rpb24gdG8gZ2V0IHZhbHVlIG9mIGFuIGFzc29j
aWF0aW9uIHBhcmFtZXRlciAqLwpAQCAtNDI2Myw3ICs0MjY0LDcgQEAgYXJydmFyc2V0Zm4oUGFy
YW0gcG0sIGNoYXIgKip4KQogCSpkcHRyID0geDsKICAgICBpZiAocG0tPmVuYW1lKSB7CiAJaWYg
KHgpCi0JICAgIGFycmZpeGVudihwbS0+ZW5hbWUsIHgpOworCSAgICBhcnJmaXhlbnYoTlVMTCwg
cG0sIHgpOwogCWVsc2UgaWYgKCpkcHRyID09IHBhdGgpCiAJICAgIHBhdGhjaGVja2VkID0gcGF0
aDsKICAgICB9CkBAIC00MjkyLDcgKzQyOTMsNyBAQCBjb2xvbmFycnNldGZuKFBhcmFtIHBtLCBj
aGFyICp4KQogCSpkcHRyID0gY29sb25zcGxpdCh4LCBwbS0+bm9kZS5mbGFncyAmIFBNX1VOSVFV
RSk7CiAgICAgZWxzZQogCSpkcHRyID0gbWthcnJheShOVUxMKTsKLSAgICBhcnJmaXhlbnYocG0t
Pm5vZGUubmFtLCAqZHB0cik7CisgICAgYXJyZml4ZW52KHBtLCBOVUxMLCAqZHB0cik7CiAgICAg
enNmcmVlKHgpOwogfQogCkBAIC00MzM4LDcgKzQzMzksNyBAQCB0aWVkYXJyc2V0Zm4oUGFyYW0g
cG0sIGNoYXIgKngpCiAgICAgfSBlbHNlCiAJKmRwdHItPmFycnB0ciA9IE5VTEw7CiAgICAgaWYg
KHBtLT5lbmFtZSkKLQlhcnJmaXhlbnYocG0tPm5vZGUubmFtLCAqZHB0ci0+YXJycHRyKTsKKwlh
cnJmaXhlbnYocG0sIE5VTEwsICpkcHRyLT5hcnJwdHIpOwogfQogCiAvKiovCkBAIC01Mjc2LDE4
ICs1Mjc3LDI5IEBAIHBpcGVzdGF0c2V0Zm4oVU5VU0VEKFBhcmFtIHBtKSwgY2hhciAqKngpCiAg
ICAgICAgIG51bXBpcGVzdGF0cyA9IDA7CiB9CiAKKy8qIFVwZGF0ZXMgdGhlIGVudmlyb25tZW50
IHN0cmluZyBvZiBhIHRpZWQgc2NhbGFyIHBhcmFtZXRlci4KKyAqCisgKiBwbTogdGhlIHRpZWQg
c2NhbGFyIHBhcmFtZXRlciBvciBOVUxMCisgKiBhcG06IHRoZSB0aWVkIGFycmF5IHBhcmFtZXRl
ciBpZiBwbSBpcyBOVUxMIG9yIE5VTEwKKyAqIHQ6IHRoZSB0aWVkIGFycmF5IGVsZW1lbnRzCisg
Ki8KKwogLyoqLwogdm9pZAotYXJyZml4ZW52KGNoYXIgKnMsIGNoYXIgKip0KQorYXJyZml4ZW52
KFBhcmFtIHBtLCBQYXJhbSBhcG0sIGNoYXIgKip0KQogewotICAgIFBhcmFtIHBtOwogICAgIGlu
dCBqb2luY2hhcjsKIAogICAgIGlmICh0ID09IHBhdGgpCiAJY21kbmFtdGFiLT5lbXB0eXRhYmxl
KGNtZG5hbXRhYik7CiAKLSAgICBwbSA9IChQYXJhbSkgcGFyYW10YWItPmdldG5vZGUocGFyYW10
YWIsIHMpOwotICAgIAorCisgICAgaWYgKCFwbSAmJgorCSghKHBtID0gKFBhcmFtKSByZWFscGFy
YW10YWItPmdldG5vZGUocmVhbHBhcmFtdGFiLCBhcG0tPmVuYW1lKSkgfHwKKwkgUE1fVFlQRShw
bS0+bm9kZS5mbGFncykgIT0gUE1fU0NBTEFSIHx8CisJICFwbS0+ZW5hbWUgfHwgc3RyY21wKHBt
LT5lbmFtZSwgYXBtLT5ub2RlLm5hbSkpKQorCXJldHVybjsKKwogICAgIC8qCiAgICAgICogT25s
eSBvbmUgbGV2ZWwgb2YgYSBwYXJhbWV0ZXIgY2FuIGJlIGV4cG9ydGVkLiAgVW5sZXNzCiAgICAg
ICogQUxMRVhQT1JUIGlzIHNldCwgdGhpcyBtdXN0IGJlIGdsb2JhbC4KQEAgLTUzMDQsNyArNTMx
Niw3IEBAIGFycmZpeGVudihjaGFyICpzLCBjaGFyICoqdCkKICAgICAgKiBEbyBub3QgImZpeCIg
cGFyYW1ldGVycyB0aGF0IHdlcmUgbm90IGV4cG9ydGVkCiAgICAgICovCiAKLSAgICBpZiAoIShw
bS0+bm9kZS5mbGFncyAmIFBNX0VYUE9SVEVEKSkKKyAgICBpZiAoIShwbS0+bm9kZS5mbGFncyAm
IFBNX0VYUE9SVEVEKSB8fCBpc2hpZGRlbihwbSkpCiAJcmV0dXJuOwogCiAgICAgaWYgKHBtLT5u
b2RlLmZsYWdzICYgUE1fU1BFQ0lBTCkKQEAgLTY0NjQsNiArNjQ3NiwxNSBAQCB1cHNjb3BlKFBh
cmFtIHBtLCBjb25zdCBQYXJhbSByZWYpCiAgICAgcmV0dXJuIHBtOwogfQogCisvKiBSZXR1cm4g
d2hldGhlciB0aGUgcGFyYW1ldGVyIGlzIGhpZGRlbiBieSBhIHNhbWUgbmFtZSBsb2NhbCBwYXJh
bWF0ZXIuICovCisKKy8qKi8KK21vZF9leHBvcnQgaW50Citpc2hpZGRlbihQYXJhbSBwbSkKK3sK
KyAgICByZXR1cm4gcG0gIT0gKFBhcmFtKSByZWFscGFyYW10YWItPmdldG5vZGUyKHJlYWxwYXJh
bXRhYiwgcG0tPm5vZGUubmFtKTsKK30KKwogLyoqLwogc3RhdGljIGludAogdmFsaWRfcmVmbmFt
ZShjaGFyICp2YWwsIGludCBmbGFncykKZGlmZiAtLWdpdCBhL1Rlc3QvSzAxbmFtZXJlZi56dHN0
IGIvVGVzdC9LMDFuYW1lcmVmLnp0c3QKaW5kZXggOTUyYmJkMzBjLi5kNDlmZjFjNTAgMTAwNjQ0
Ci0tLSBhL1Rlc3QvSzAxbmFtZXJlZi56dHN0CisrKyBiL1Rlc3QvSzAxbmFtZXJlZi56dHN0CkBA
IC0yMzQ4LDQgKzIzNDgsNTEgQEAgRjpjb252ZXJ0aW5nIGZyb20gYXNzb2NpYXRpb24vYXJyYXkg
dG8gc3RyaW5nIHNob3VsZCB3b3JrIGhlcmUgdG9vCiA+QjoxNiNGRgogPkM6MTYjRkYKIAorIHNo
b3coKSB7CisgICBwcmludGYgIiUyczogVjE9JTJzLyUycyBWMj0lMnMvJTJzXG4iIFwKKyAgICAg
JDEgIiRWMSIgIiQocHJpbnRlbnYgVjEpIiAiJFYyIiAiJChwcmludGVudiBWMikiCisgfQorIGxv
Y2FsIFYxPUExCisgbG9jYWwgLXggVjI9QTIKKyBsb2NhbCAtbiBSMT1WMSBSMj1WMgorIHNob3cg
QDEKKyAoKSB7CisgICBsb2NhbCBWMT1CMQorICAgbG9jYWwgLXggVjI9QjIKKyAgIHNob3cgQDIK
KyAgIGV4cG9ydCBSMQorICAgUjI9QzIKKyAgIHNob3cgQDMKKyB9Cisgc2hvdyBANAorIHVuZnVu
Y3Rpb24gc2hvdworMDpIaWRkZW4gcGFyYW1ldGVycyBhcmVuJ3QgZXhwb3J0ZWQgKHBhcnQgMSkK
Kz5AMTogVjE9QTEvICAgVjI9QTIvQTIKKz5AMjogVjE9QjEvICAgVjI9QjIvQjIKKz5AMzogVjE9
QjEvICAgVjI9QjIvQjIKKz5ANDogVjE9QTEvQTEgVjI9QzIvQzIKKworIHNob3coKSB7CisgICBw
cmludGYgIiUyczogVjE9JS01cy8lLTVzIFYyPSUtNXMvJS01cyBWMz0lLTVzLyUtNXNcbiIgXAor
ICAgICAkMSAiJFYxIiAiJChwcmludGVudiBWMSkiICIkVjIiICIkKHByaW50ZW52IFYyKSIgIiRW
MyIgIiQocHJpbnRlbnYgVjMpIgorIH0KKyBsb2NhbCAteCAtVCBWMT1BMToxQSB2MQorIGxvY2Fs
IC14IC1UIFYyPUEyOjJBIHYyCisgbG9jYWwgLW4gUjI9VjIgUjM9VjMKKyBsb2NhbCAteCAtVCBS
Mz1BMzozQSB2MworIHNob3cgQDEKKyAoKSB7CisgICBsb2NhbCAteCBWMT1CMSBWMj1CMiBWMz1C
MworICAgc2hvdyBAMgorICAgdjE9KEMxIDFDKSBSMj1DMjoyQyB2Mz0oQzMgM0MpCisgICBzaG93
IEAzCisgfQorIHNob3cgQDQKKyB1bmZ1bmN0aW9uIHNob3cKKzA6SGlkZGVuIHBhcmFtZXRlcnMg
YXJlbid0IGV4cG9ydGVkIChwYXJ0IDIpCis+QDE6IFYxPUExOjFBL0ExOjFBIFYyPUEyOjJBL0Ey
OjJBIFYzPUEzOjNBL0EzOjNBCis+QDI6IFYxPUIxICAgL0IxICAgIFYyPUIyICAgL0IyICAgIFYz
PUIzICAgL0IzICAgCis+QDM6IFYxPUIxICAgL0IxICAgIFYyPUIyICAgL0IyICAgIFYzPUIzICAg
L0IzICAgCis+QDQ6IFYxPUMxOjFDL0MxOjFDIFYyPUMyOjJDL0MyOjJDIFYzPUMzOjNDL0MzOjND
CisKICVjbGVhbgo=
--0000000000000f82640656f6696c--