Hello.

>Yes I experienced actual memory corruption. Here is the test run:
>
>test_bracket(TestEnv): ./ruby/test_env.rb:19:in `[]=': failed to allocate
>memory (NoMemoryError)
>        from ./ruby/test_env.rb:19:in `test_bracket'
>        from /install/ruby-1-8-cvs/ruby/lib/test/unit/testcase.rb:70:in
>`run'
>        from /install/ruby-1-8-cvs/ruby/lib/test/unit/testsuite.rb:32:in
>`run'
>        from /install/ruby-1-8-cvs/ruby/lib/test/unit/testsuite.rb:31:in
>`run'

Hmm, I also think it's better to use setenv(3). But for curiousty,
Can you try this patch? Still core dumps?

Index: hash.c
===================================================================
RCS file: /src/ruby/hash.c,v
retrieving revision 1.128.2.14
diff -u -w -b -p -r1.128.2.14 hash.c
--- hash.c	19 Jul 2005 08:25:37 -0000	1.128.2.14
+++ hash.c	1 Feb 2006 06:50:26 -0000
@@ -1788,6 +1788,23 @@ envix(nam)
     return i;
 }
 
+#ifndef _WIN32
+char *
+ruby_getenv(name)
+    const char *name;
+{
+    char *p = environ[envix(name)];
+
+    if (p) {
+	p = strchr(p, '=');
+	if (p) {
+	    p += 1;
+	}
+    }
+    return p;
+}
+#endif
+
 void
 ruby_setenv(name, value)
     const char *name;
Index: util.h
===================================================================
RCS file: /src/ruby/util.h,v
retrieving revision 1.14.2.2
diff -u -w -b -p -r1.14.2.2 util.h
--- util.h	30 Oct 2005 18:20:53 -0000	1.14.2.2
+++ util.h	1 Feb 2006 06:50:42 -0000
@@ -46,11 +46,18 @@ void ruby_add_suffix();
 void ruby_qsort _((void*, const int, const int, int (*)(), void*));
 #define qsort(b,n,s,c,d) ruby_qsort(b,n,s,c,d)
 
+#ifndef _WIN32
+char *ruby_getenv _((const char*));
+#undef getenv
+#define getenv(name) ruby_getenv(name)
+#endif
+
 void ruby_setenv _((const char*, const char*));
-void ruby_unsetenv _((const char*));
 #undef setenv
-#undef unsetenv
 #define setenv(name,val) ruby_setenv(name,val)
+
+void ruby_unsetenv _((const char*));
+#undef unsetenv
 #define unsetenv(name,val) ruby_unsetenv(name);
 
 char *ruby_strdup _((const char*));