[前][次][番号順一覧][スレッド一覧]

ruby-changes:14454

From: knu <ko1@a...>
Date: Mon, 11 Jan 2010 22:59:18 +0900 (JST)
Subject: [ruby-changes:14454] Ruby:r26286 (trunk): * hash.c (ruby_setenv): Improve the emulatation of setenv(3) on

knu	2010-01-11 22:58:59 +0900 (Mon, 11 Jan 2010)

  New Revision: 26286

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26286

  Log:
    * hash.c (ruby_setenv): Improve the emulatation of setenv(3) on
      environments where putenv(3) is used.  Raise EINVAL If a
      variable name contains an '='.

  Modified files:
    trunk/ChangeLog
    trunk/hash.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 26285)
+++ ChangeLog	(revision 26286)
@@ -1,3 +1,9 @@
+Mon Jan 11 22:45:08 2010  Akinori MUSHA  <knu@i...>
+
+	* hash.c (ruby_setenv): Improve the emulatation of setenv(3) on
+	  environments where putenv(3) is used.  Raise EINVAL If a
+	  variable name contains an '='.
+
 Mon Jan 11 18:16:38 2010  wanabe  <s.wanabe@g...>
 
 	* vm_insnhelper.h (GET_BLOCK_PTR): return 0 when in class frame.
Index: hash.c
===================================================================
--- hash.c	(revision 26285)
+++ hash.c	(revision 26286)
@@ -2045,6 +2045,10 @@
 #if defined(_WIN32)
     int len;
     char *buf;
+    if (strchr(name, '=')) {
+	errno = EINVAL;
+	rb_sys_fail("ruby_setenv");
+    }
     if (value) {
 	len = strlen(name) + 1 + strlen(value) + 1;
 	buf = ALLOCA_N(char, len);
@@ -2072,8 +2076,13 @@
 	    rb_sys_fail("unsetenv");
     }
 #elif defined __sun__
-    size_t len = strlen(name);
+    size_t len;
     char **env_ptr, *str;
+    if (strchr(name, '=')) {
+	errno = EINVAL;
+	rb_sys_fail("ruby_setenv");
+    }
+    len = strlen(name);
     for (env_ptr = GET_ENVIRON(environ); (str = *env_ptr) != 0; ++env_ptr) {
 	if (!strncmp(str, name, len) && str[len] == '=') {
 	    if (!in_origenv(str)) free(str);
@@ -2089,7 +2098,12 @@
     }
 #else  /* WIN32 */
     size_t len;
-    int i=envix(name);		        /* where does it go? */
+    int i;
+    if (strchr(name, '=')) {
+	errno = EINVAL;
+	rb_sys_fail("ruby_setenv");
+    }
+    i=envix(name);		        /* where does it go? */
 
     if (environ == origenviron) {	/* need we copy environment? */
 	int j;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]