# \[Bug:trunk\] ENV.\[\]= should raise an error on failure

**URL:** <https://www.ruby-forum.com/t/bug-trunk-env-should-raise-an-error-on-failure/181360>\
**Category:** Development\
**Created:** [January 10, 2010, 7:42pm UTC](https://www.ruby-forum.com/t/bug-trunk-env-should-raise-an-error-on-failure/181360 "2010-01-10T19:42:48Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [January 10, 2010, 7:42pm UTC](https://www.ruby-forum.com/t/bug-trunk-env-should-raise-an-error-on-failure/181360/1 "2010-01-10T19:42:48Z")

</div>

ã€€ç¾åœ¨ ENV.[]= ã¯ setenv(3) ã‚„ putenv(3) ã®è¿”ã‚Šå€¤ã‚’è¦‹ã¦ã„ã¾ã›ã‚“ãŒã€  
ã‚¨ãƒ©ãƒ¼ã¯æ¤œçŸ¥ã—ã¦ä¾‹å¤–ã‚’ä¸Šã’ã‚‹ã¹ãã§ã¯ãªã„ã§ã—ã‚‡ã†ã‹ã€‚

ã€€ã‚ã‹ã‚Šã‚„ã™ã„ä¾‹ã§ã¯ ENV[“A=”] = “1” ã®ã‚ˆã†ã«ä¸æ­£ãªåå‰ã®ç’°å¢ƒå¤‰æ•°ã‚’  
è¨­å®šã—ã‚ˆã†ã¨ã™ã‚‹ã¨ Error::EINVAL ãŒç™ºç”Ÿã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚

# Index: hash.c

— hash.c (revision 26276)  
+++ hash.c (working copy)  
@@ -2049,7 +2049,8 @@ ruby\_setenv(const char \*name, const char  
len = strlen(name) + 1 + strlen(value) + 1;  
buf = ALLOCA\_N(char, len);  
snprintf(buf, len, “%s=%s”, name, value);

- putenv(buf);

- if (putenv(buf))

- 

```
 rb_sys_fail("putenv");

```

/\* putenv() doesn’t handle empty value \*/  
if (\*value)  
@@ -2064,10 +2065,13 @@ ruby\_setenv(const char \*name, const char  
#elif defined(HAVE\_SETENV) && defined(HAVE\_UNSETENV)  
#undef setenv  
#undef unsetenv

- if (value)
- setenv(name,value,1);
- else
- unsetenv(name);

- if (value) {
- if (setenv(name, value, 1))
- 

```
 rb_sys_fail("setenv");

```

- } else {
- if (unsetenv(name))
- 

```
 rb_sys_fail("unsetenv");

```

- }  
#elif defined **sun**  
size\_t len = strlen(name);  
char \*\*env\_ptr, \*str;  
@@ -2081,7 +2085,8 @@ ruby\_setenv(const char \*name, const char  
if (value) {  
str = malloc(len += strlen(value) + 2);  
snprintf(str, len, “%s=%s”, name, value);

- putenv(str);

- if (putenv(str))
- 

```
 rb_sys_fail("putenv");

```

}  
#else /\* WIN32 \*/  
size\_t len;

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [January 11, 2010, 1:29am UTC](https://www.ruby-forum.com/t/bug-trunk-env-should-raise-an-error-on-failure/181360/2 "2010-01-11T01:29:51Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:40023] [Bug:trunk] ENV.[]= should raise an  
error on failure”  
on Mon, 11 Jan 2010 03:42:34 +0900, “Akinori MUSHA”  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|e$B!!8=:\_e(B ENV.[]= e$B$Oe(B setenv(3) e$B$de(B putenv(3) e$B$NJV$jCM$r8+$F$$$^$;$s$,!"e(B  
|e$B%(%i!\<$O8!CN$7$FNc30$r\>e$2$k$Y$-$G$O$J$$$G$7$g$&$+!#e(B  
|  
|e$B!!$o$+$j$d$9$$Nc$G$Oe(B ENV[“A=”] = “1” e$B$N$h$&$KIT@5$JL\>A0$N4D6-JQ?t$re(B  
|e$B@\_Dj$7$h$&$H$9$k$He(B Error::EINVAL e$B$,H/@8$9$k$h$&$K$J$j$^$9!#e(B

e$B;?@.$7$^$9!#%3%\_%C%H$7$F$/$@$5$$$^$;$s$+!#e(B

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [January 11, 2010, 5:29am UTC](https://www.ruby-forum.com/t/bug-trunk-env-should-raise-an-error-on-failure/181360/3 "2010-01-11T05:29:13Z")

</div>

At Mon, 11 Jan 2010 09:27:58 +0900,  
matz wrote:

> In message “Re: [ruby-dev:40023] [Bug:trunk] ENV.[]= should raise an error on failure”  
> on Mon, 11 Jan 2010 03:42:34 +0900, “Akinori MUSHA” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> |ã€€ç¾åœ¨ ENV.[]= ã¯ setenv(3) ã‚„ putenv(3) ã®è¿”ã‚Šå€¤ã‚’è¦‹ã¦ã„ã¾ã›ã‚“ãŒã€  
> |ã‚¨ãƒ©ãƒ¼ã¯æ¤œçŸ¥ã—ã¦ä¾‹å¤–ã‚’ä¸Šã’ã‚‹ã¹ãã§ã¯ãªã„ã§ã—ã‚‡ã†ã‹ã€‚  
> |  
> |ã€€ã‚ã‹ã‚Šã‚„ã™ã„ä¾‹ã§ã¯ ENV[“A=”] = “1” ã®ã‚ˆã†ã«ä¸æ­£ãªåå‰ã®ç’°å¢ƒå¤‰æ•°ã‚’  
> |è¨­å®šã—ã‚ˆã†ã¨ã™ã‚‹ã¨ Error::EINVAL ãŒç™ºç”Ÿã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
> 
> è³›æˆã—ã¾ã™ã€‚ã‚³ãƒŸãƒƒãƒˆã—ã¦ãã ã•ã„ã¾ã›ã‚“ã‹ã€‚

ã€€ã‚³ãƒŸãƒƒãƒˆã—ã¾ã—ãŸã€‚

ã€€ã•ã‚‰ã«ã€ putenv(3) ã‚’å‘¼ã¶(name ã¨ value ã‚’å‘¼ã³å‡ºã—å´ã§åˆæˆã™ã‚‹)  
ç’°å¢ƒã§ã¯ name ä¸­ã® ‘=’ ã‚’æ¤œçŸ¥ã—ã¦ EINVAL ã‚’ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆã™ã¹ãã‹ã‚‚  
ã—ã‚Œã¾ã›ã‚“ã­ã€‚å°‘ã—èª¿ã¹ã¦ã‹ã‚‰ã‚„ã‚Šã¾ã™ã€‚

ã€€ãªãŠã€ #if defined(\_WIN32) ã®ä¸­ã¯ã„ã˜ã‚‰ãªã„ã§ãŠãã¾ã—ãŸã€‚ä»¥ä¸‹ã®  
éƒ¨åˆ†ã§ã€ Windowsã®å ´åˆã¯ putenv(3) ã®å¤±æ•—ã‚’ç¹”ã‚Šè¾¼ã‚“ã§ã„ã‚‹ã‚ˆã†ã«ã‚‚  
èª­ã‚ã‚‹ã‹ã‚‰ã§ã™ã€‚

2052 putenv(buf);  
2053  
2054 /\* putenv() doesn’t handle empty value \*/  
2055 if (\*value)  
2056 SetEnvironmentVariable(name,value);

ã¨ã“ã‚ã§ã€ã“ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚‚ãã®ã¾ã¾å–ã‚‹ã¨ä»¥ä¸‹ã®ã‚ˆã†ã«ã™ã‚‹ã®ãŒæ­£ã—ã„  
ã‚ˆã†ã«æ€ãˆã¾ã™ãŒã€çœŸæ„ã¯ä½•ã§ã—ã‚‡ã†ã‹ã€‚

```
if (*value) {
    /* bufã®ä½œæˆ */
    putenv(buf);
} else {
    SetEnvironmentVariable(name, value);
}

```

---

<div class="post-metadata">

**Author:** ![Akinori\_MUSHA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/b782af/32.png) [@Akinori\_MUSHA](https://www.ruby-forum.com/u/Akinori_MUSHA)\
**Post date:** [January 12, 2010, 2:05am UTC](https://www.ruby-forum.com/t/bug-trunk-env-should-raise-an-error-on-failure/181360/4 "2010-01-12T02:05:29Z")

</div>

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:40026] Re: [Bug:trunk] ENV.[]= should raise an  
error on failure”  
on Jan.11,2010 13:28:01, [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B$H$3$m$G!“$3$N%3%a%s%H$b$=$N$^$^\<h$k$H0J2\<$N$h$&$K$9$k$N$,@5$7$$e(B  
> e$B$h$&$K;W$($^$9$,!”??0U$O2?$G$7$g$&$+!#e(B
> 
> ```
> if (*value) {
> /* bufe$B$N:n@.e(B */
> putenv(buf);
> } else {
> SetEnvironmentVariable(name, value);
> }
> 
> ```

e$B\>r7o$,4V0c$C$F$$$?$N$OA4$/$=$NDL$j$G$9e(B orz  
commite$B$7$F$\*$-$^$7$?!#e(B

e$BI,$:e(Bputenv()e$B$rDL$7$F$$$k$N$O!“AG$Ne(Bgetenv()e$B$,8+$k$N$O??$N4D6-e(B  
e$BJQ?tNN0h$G$O$J$/e(Bputenv()e$B$,A`:n$7$F$$$k%3%T!\<NN0h$G$”$k$?$a!“e(B  
e$B$=$A$i$K85$N4D6-JQ?tCM$,;D$C$F$7$^$&$N$rHr$1$k$?$a$G$9!#e(B  
e$B$D$^$j!“6u$N4D6-JQ?tCM$r@\_Dj$7$?$H$-!“85$N4D6-JQ?tCM$,;D$k$he(B  
e$B$j!”$=$N4D6-JQ?t$,\>C$($kJ}$,%^%7!”$H$$$&H=CG$G$9!#e(B  
e$B$J$\*!”$3$l$i$NOC$Oe(Brubye$B$K$OD\>@$N1F6A$rM?$($k$b$N$G$O$J$/$F!"e(B  
e$B;R%W%m%;%9$KEAGE$7$?;~$K$N$\_1F6A$7$^$9!#e(B

e$B$=$l$G$O!#e(B
