なかだです。

At Sat, 9 Jun 2001 13:28:30 +0900,
Kazuhiro NISHIYAMA <zn / mbf.nifty.com> wrote:
> irbでENV.reject!{true}を実行すると[BUG] Segmentation faultに
> なります。
> ruby直接だと何ともないです。

  readline の中で environ をコピーするときに文字列まではコピー
してないようです。それで hash.c での前提とずれてしまうみたい。
これで再現しました。

$ ruby -rreadline -e 'Readline.readline("");ENV.reject!{true}'

  最初に environ を全部コピーしておくか、オリジナルと総当たりで
調べるかでしょうか。


Index: hash.c =================================================================== RCS file: /cvs/ruby/src/ruby/hash.c,v retrieving revision 1.47 diff -u -2 -p -r1.47 hash.c --- hash.c 2001/06/08 14:20:19 1.47 +++ hash.c 2001/06/09 08:04:30 @@ -1067,6 +1067,10 @@ ruby_setenv(name, value) } if (!value) { - if (environ[i] != origenviron[i]) - free(environ[i]); + if (environ != origenviron) { + char **envp = origenviron; + while (*envp && *envp != environ[i]) envp++; + if (!*envp) + free(environ[i]); + } while (environ[i]) { environ[i] = environ[i+1];
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦