Project

General

Profile

Bug #2591

ENV.[]= should raise an error on failure

Added by matz (Yukihiro Matsumoto) almost 10 years ago. Updated over 8 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.2dev (2010-01-12 trunk 26302) [x86_64-freebsd8.0]
Backport:
[ruby-dev:40024]

Description

=begin
まつもと ゆきひろです

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" knu@iDaemons.org writes:

| 現在 ENV.[]= は setenv(3) や putenv(3) の返り値を見ていませんが、
|エラーは検知して例外を上げるべきではないでしょうか。
|
| わかりやすい例では ENV["A="] = "1" のように不正な名前の環境変数を
|設定しようとすると Error::EINVAL が発生するようになります。

賛成します。コミットしてくださいませんか。
=end

History

#1

Updated by usa (Usaku NAKAMURA) almost 10 years ago

=begin
こんにちは、なかむら(う)です。

In message "[ruby-dev:40026] Re: [Bug:trunk] ENV.[]= should raise an error on failure"
on Jan.11,2010 13:28:01, knu@iDaemons.org wrote:

ところで、このコメントもそのまま取ると以下のようにするのが正しい
ように思えますが、真意は何でしょうか。

if (*value) {
    /* bufの作成 */
    putenv(buf);
} else {
    SetEnvironmentVariable(name, value);
}

条件が間違っていたのは全くその通りです orz
commitしておきました。

必ずputenv()を通しているのは、素のgetenv()が見るのは真の環境
変数領域ではなくputenv()が操作しているコピー領域であるため、
そちらに元の環境変数値が残ってしまうのを避けるためです。
つまり、空の環境変数値を設定したとき、元の環境変数値が残るよ
り、その環境変数が消える方がマシ、という判断です。
なお、これらの話はrubyには直接の影響を与えるものではなくて、
子プロセスに伝播した時にのみ影響します。

それでは。
--
U.Nakamura usa@garbagecollect.jp

=end

#2

Updated by naruse (Yui NARUSE) almost 10 years ago

  • Status changed from Open to Closed
  • ruby -v set to ruby 1.9.2dev (2010-01-12 trunk 26302) [x86_64-freebsd8.0]

=begin

=end

Also available in: Atom PDF