[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

15 messages 2004/04/05

[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

17 messages 2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。落ちる場所がわかりました。

[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — nobu.nakada@... 2004/04/16

なかだです。

[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/04/16

山本です。

[ruby-dev:23420] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-04-21 02:13:52 UTC
List: ruby-dev #23420
山本です。

>process.c (1253) にも、配列外にアクセスしているところがありました。

これは問題なかったので、(prog が真なので、argv[0] は実行されませんでした)
[ruby-dev:23417]でコミットしました。


>    if (!prog && argc == 1) {
>	--argc;
>	prog = *argv++;
>    }
>
>が間違えやすくしていると思うので、これを無くせないか考えているのですが
>今日中には難しそうです。

無くせそうな方法を2つ思いついたのですが、大変そうなので見送りました。

1.rb_exec などで argc == 0 で分岐しているのを、!prog && argc == 1 で分岐すれば
  上の条件ブロックを無くせるはず。!prog && argc == 1 の場合は、argv[0] を見る。

2.prog が真なら execv、偽なら execl(argv[0]) というのも考えていました。
  (rb_check_args を、execv なら必ず prog を返すよう変更する)
    こうすれば、散見される if (!prog) prog = argv[0]; も無くせそう。

どちらも io.c なども変更する必要がありそうです。

In This Thread