[#20036] Re: Roundoff problem with Float and Marshal — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

16 messages 2003/04/18
[#20045] Re: Roundoff problem with Float and Marshal — nobu.nakada@... 2003/04/20

なかだです。

[#20063] Re: Roundoff problem with Float and Marshal — matz@... (Yukihiro Matsumoto) 2003/04/22

まつもと ゆきひろです

[#20097] jcode.rb — akira yamada / やまだあきら <akira@...>

25 messages 2003/04/26
[#20098] Re: jcode.rb — matz@... (Yukihiro Matsumoto) 2003/04/27

まつもと ゆきひろです

[#20105] Re: jcode.rb — WATANABE Hirofumi <eban@...> 2003/04/28

わたなべです。

[#20108] Re: jcode.rb — matz@... (Yukihiro Matsumoto) 2003/04/28

まつもと ゆきひろです

[ruby-dev:20120] Re: I quote: "Maybe IRB bug!!"

From: keiju@... (石塚圭樹)
Date: 2003-04-30 11:10:52 UTC
List: ruby-dev #20120
けいじゅ@ラショナルソフトウェアです.

何か久しぶりです. 

In [ruby-dev:20005] the message: "[ruby-dev:20005] Re: I quote: "Maybe
IRB bug!!"", on Apr/11 01:56(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>いろいろできたのは1.6のirbでした。1.8のだとなにをやっても例
>外になりますね。

です.

>|>|b = proc{bind}
>|>|eval "$SAFE = 1", b
>|>|p $SAFE
>|>|#=> 1
>|>意図通りです。これは「Procの中」ではありませんから。一方、
>|静的に中ってこと?
>
>「静的に中」ってのがよくわかんないんですが、Proc実行中に
>$SAFEをいじっても外側の$SAFEに影響を及ぼさないが、コンテキス
>トとしてProcを渡しても$SAFEを保護できないって動作をしますね。

ですね. まあ, こういうもんだと理解すればそれでいいのですが.

>| proc{$SAFE=1; eval "puts $SAFE"}.call
>|とか
>| proc{$SAFE=1; eval "gets"}.call
>|がエラーにならないのは正常の動作?
>
>$SAFE=1だとこれらは禁止の対象じゃないですよ。文字列汚染され
>てないし。

私の勘違いでした.

proc{$SAFE=1; eval gets}.call

をしたかったのでした. ちゃんと, エラーになりますね.

>|irbは一行一行evalしたいわけですよね. evalはThread内で実行しなくてはな
>|らないので, そうすると$SAFE>1でエラーになってしまう...
>
>evalがエラーになるのは汚染されている場合だけです。

言いたいことが伝わりませんでしたね.

irb本体の内部処理部分と, eval以降の部分に分けます. irbを使っている人の
意図としては, eval以降の部分の実行に対して$SAFEを設定したいんだと思い
ますが, $SAFEを設定されると内部処理部分まで影響が及ぶなーと言いたかっ
たのでした.

>|でも, $SAFE>1でirbを実行したいってニーズはあんまりないと思いますので,
>|無理して実行できるように対応する気はあまりないですが.
>
>Maybe IRB bug!! ってメッセージはまずいかも。って、もしかして
>最初から石塚さんそういってたっけ。

そうです. 最低でもそのぐらいはやらんとと思いました.

In [ruby-dev:20006] the message: "[ruby-dev:20006] Re: I quote: "Maybe
IRB bug!!"", on Apr/11 02:20(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>今考えたら、irbの使い方から考えて入力されたプログラムは信頼
>せざるをえないんだから、

irb上での自分の入力は信用できると言うのは問題なさそうですね.

>inputされた文字列を無条件にuntaintすればそれで良いのでは? $SAFE>2 ま
>ではそれだけでなんとかなりそう。$SAFEが3以上だとuntaintが使えないんで
>駄目だけど。

レベル2まではそれでも良さそうですね. レベル3/4は...

レベル 3 - 生成される全てのオブジェクトが汚染されます.レベル4でプログ
  ラムを実行す る環境を作り上げるのに適しています。

生成されるすべてのオブジェクトの意味がわからないんだけど,
Fixnum/true/false/nil以外全部って事?

まあ, それはよいとして, evalをprocでくくってそこだけで$SAFEを設定する
ようにしないとならないですね.

レベル 4 - 信用することのできないプログラムを実行するためのレベルです.

この場合も, irb本体は信用できるとして, load/requireしたものが信頼でき
ないって解釈すればよいんでしょうね. 

結論としては, $SAFEが設定されたらエラーとし, 別にirb独自のSAFE変数を定
義して, eval実行時だけ$SAFEを設定するようにする感じかなあ... 通常の,


  eval input文字列, context

の代わりに

  proc{|safe| $SAFE=safe; eval input文字列, context}.call irb_safe

見たいな感じ... 

今は時間がないので, あとで試してみます.

__
..................................石塚 圭樹@ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread