From: matz@... (Yukihiro Matsumoto) Date: 2000-09-11T16:33:41+09:00 Subject: [ruby-dev:10887] Re: setenv,unsetenv まつもと ゆきひろです In message "[ruby-dev:10885] Re: setenv,unsetenv" on 00/09/11, Yukihiro Matsumoto writes: ||そして,などのようにOSの環境などは書いていたのですが,どうやら ||sample/rbc.rbを使用した場合にのみ起こります. ||で,原因となっているのは,hash.c:1070行目の || free(environ[i]) ||の部分です. | |再現しません。なぜだろう。見た限りでは見落としはなさそうなの |だが。 分かりました。rbcはreadlineライブラリを使うのですが、これが 初期化ルーチンの内部でputenvを使っているため、environの値が origenvironと食い違っていました。結果としてenvironの要素のコ ピーが行われず、mallocされていない領域をfreeしていたのでした。 とりあえず、freeしようとする領域がorigenvironの対応する要素 と同じアドレスでないことを確認するようにして対処しました。も ちろんputenvの実装によってはもうちょっとイヤらしいことになる 可能性も否定できませんが。 --- hash.c 2000/09/04 08:24:01 1.35 +++ hash.c 2000/09/11 07:33:24 @@ -1057,3 +1057,4 @@ if (!value) { - free(environ[i]); + if (environ[i] != origenviron[i]) + free(environ[i]); while (environ[i]) { @@ -1069,3 +1070,4 @@ else { - free(environ[i]); + if (environ[i] != origenviron[i]) + free(environ[i]); }