diff --git a/src/modules/Perl/perlmod.c b/src/modules/Perl/perlmod.c
index cc180c37a7f3cc14be12651417dee339ba434ebb..6559f48c4fa2d5873cd579f9e96bd438fb854bb7 100644
--- a/src/modules/Perl/perlmod.c
+++ b/src/modules/Perl/perlmod.c
@@ -171,7 +171,7 @@ static void perlmod_create(INT32 args)
       env_block_size+=k->ind.u.string->len+k->val.u.string->len+2;
 
     THIS->env_block=xalloc(env_block_size);
-    THIS->env=(char **)xalloc(m_sizeof(env_mapping)+1);
+    THIS->env=(char **)xalloc(sizeof(char *)*(m_sizeof(env_mapping)+1));
 
     env_blockp=THIS->env_block;
     d=0;
@@ -205,7 +205,7 @@ static void perlmod_create(INT32 args)
       env_block_size+=strlen(environ[d])+1;
 
     THIS->env_block=xalloc(env_block_size);
-    THIS->env=(char **)xalloc(d+1);
+    THIS->env=(char **)xalloc(sizeof(char *)*(d+1));
 
     env_blockp=THIS->env_block;
 
@@ -216,6 +216,12 @@ static void perlmod_create(INT32 args)
       MEMCPY(env_blockp,environ[d],l+1);
       env_blockp+=l+1;
     }
+
+#ifdef PIKE_DEBUG
+    if(env_blockp - THIS->env_block > env_block_size)
+      fatal("Arglebargle glop-glyf.\n");
+#endif
+
     THIS->env[d]=0;
   }