From deb58f070b259f9af6efc1705d0eb0474e5b3dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Thu, 17 Feb 2000 17:38:45 -0800 Subject: [PATCH] possible bugfix Rev: src/modules/Perl/perlmod.c:1.9 --- src/modules/Perl/perlmod.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/modules/Perl/perlmod.c b/src/modules/Perl/perlmod.c index df33836166..fd3975c600 100644 --- a/src/modules/Perl/perlmod.c +++ b/src/modules/Perl/perlmod.c @@ -186,9 +186,33 @@ static void perlmod_create(INT32 args) MEMCPY(env_blockp,k->val.u.string->str,k->ind.u.string->len); env_blockp+=k->val.u.string->len; - *(env_blockp++)='0'; + *(env_blockp++)=0; } THIS->env[d]=0; + } else { + /* Perl likes to be able to write in the environment block, + * give it it's own copy to protect ourselves.. /Hubbe + */ + INT32 d; + int env_block_size=0; + char *env_blockp; + + for(d=0;environ[d];d++) + env_block_size+=strlen(environ[d])+1; + + THIS->env_block=xalloc(env_block_size); + THIS->env=(char **)xalloc(d+1); + + env_blockp=THIS->env_block; + + for(d=0;environ[d];d++) + { + int l=strlen(environ[d]); + THIS->env[d++]=env_blockp; + MEMCPY(env_blockp,environ[d],l+1); + env_blockp+=l+1; + } + THIS->env[d]=0; } THREADS_ALLOW(); -- GitLab