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