This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ENV leaks on win32 (was Re: Comments on ENV patch sought)
authorHans Mulder <hansm@euronet.nl>
Thu, 29 May 1997 08:30:44 +0000 (20:30 +1200)
committerTim Bunce <Tim.Bunce@ig.co.uk>
Wed, 11 Jun 1997 00:00:00 +0000 (12:00 +1200)
commit66b1d5575fd5eb6242bac2e9a08b163be8b1b960
tree494f32324f1768f55f5912b08ed6164b414f00ae
parent5117ca915f2c72e17e52c313797ad394bd76c418
ENV leaks on win32 (was Re: Comments on ENV patch sought)

Subject: [PATCH] for NETaa13787: %ENV=(); doesn't clear the environment

Perl maintains two representations of the environment:

(A) a hash named %ENV, used by the perl script
(B) a char** named environ, which is passed to child processes

Obviously, the intent is to keep tho two in sync.
This fails in two situations:

(1) A list assignment to %ENV clears (A) but not (B);
(2) Assigning to $0 has the side effect of deleting the key
NoNeSuCh form (B) but not from (A).

$ perl -e '%ENV=(); print "home\n" if exists $ENV{HOME}; exec "echo \$HOME";'
/Users/hansm
$ perl -e '$ENV{NoNeSuCh} = "foo"; $0 = "bar"; exec "echo \$NoNeSuCh";'

$ perl -e '$ENV{NoNeSuCh} = "foo"; exec "echo \$NoNeSuCh";'
foo
$

I've complained about rpoblem (1) before; and Larry assigned
it bug ID NETaa13787 when he entered it into DDTS.

The patch below attempts to remedy both problems, at least on
Unix platforms.  I don't know how to handle the environment
on VMS and WIN32; my code simply calls DIE('unimplemented"),
which is honest but won't make users on those plaforms happy.

p5p-msgid: 199705292240.AAA01135@mail.euronet.nl
Signed-off-by: Peter Prymmer <pvhp@forte.com>
embed.h
global.sym
mg.c
perl.h
proto.h
t/op/magic.t