[#39548] [Bug #2291] Net::FTPでソケットをオープンする前にbinary=を呼び出すと落ちる — Akira Matsuda <redmine@...>

Bug #2291: Net::FTPでソケットをオープンする前にbinary=を呼び出すと落ちる

10 messages 2009/10/27

[#39592] infinite recursive call to C function — Yusuke ENDOH <mame@...>

遠藤です。

17 messages 2009/10/30
[#39596] Re: infinite recursive call to C function — Yukihiro Matsumoto <matz@...> 2009/10/30

まつもと ゆきひろです

[#39599] Re: infinite recursive call to C function — Nobuyoshi Nakada <nobu@...> 2009/11/02

なかだです。

[#39601] Re: infinite recursive call to C function — Yukihiro Matsumoto <matz@...> 2009/11/02

まつもと ゆきひろです

[ruby-dev:39594] Re: [ruby-cvs:32774] Ruby:r25556 (trunk): * array.c (rb_ary_to_ary): do not use #respond_to? to detect

From: Yukihiro Matsumoto <matz@...>
Date: 2009-10-30 14:10:15 UTC
List: ruby-dev #39594
まつもと ゆきひろです

In message "Re: [ruby-dev:39591] Re: [ruby-cvs:32774] Ruby:r25556 (trunk): * array.c (rb_ary_to_ary): do not use #respond_to? to detect"
    on Fri, 30 Oct 2009 20:51:46 +0900, Nobuyoshi Nakada <nobu@ruby-lang.org> writes:

|At Fri, 30 Oct 2009 18:40:53 +0900,
|Yukihiro Matsumoto wrote in [ruby-dev:39589]:
|>   * method_missingが再定義されている時にはそれを呼ぶ。ちゃん
|>     と動作するかどうかはよくわからない
|
|こっちを実装してみました。

コードレビュー。

  * emtry -> entry
  * check_funcallの中でrb_search_method_emtry()を呼んでも問
    題なさそう

  * method_missingを呼ぶ条件は

|+	if (!me || (me->flag & NOEX_BASIC) || !rb_obj_respond_to(recv, mid, TRUE))

    になっているが、rb_method_basic_definition_p()だけでよい
    のではないか。

  * 私の理解が正しければ、正しい(と思われる)ロジックは

     + meがあればそれを呼ぶ
     + method_missingが再定義されていなければQundef
     + 再定義されていれば、rescueした上でmethod_missingを呼ぶ
     + 例外が起きたら、以下の条件を満たすときだけ、Qundef。
       満たさなければ、同じ例外をそのままあげる
       - レシーバが同じ
       - メソッド名が同じ

どうでしょう?

In This Thread