[#40961] [Bug #3137] complex.rb changes exceptions of Math — Yusuke Endoh <redmine@...>

Bug #3137: complex.rb changes exceptions of Math

15 messages 2010/04/12
[#40967] Re: [Bug #3137] complex.rb changes exceptions of Math — keiju@... (石塚圭樹) 2010/04/13

けいじゅ@いしつかです.

[#41038] Windows と DL が使用条件の libffi — Aaron Patterson <aaron.patterson@...>

こんにちは!アーロンです。

17 messages 2010/04/22
[#41039] Re: Windows と DL が使用条件の libffi — "U.Nakamura" <usa@...> 2010/04/22

こんにちは、なかむら(う)です。

[#41040] Re: Windows と DL が使用条件の libffi — "NARUSE, Yui" <naruse@...> 2010/04/22

成瀬です。

[#41059] Re: Windows と DL が使用条件の libffi — Aaron Patterson <aaron.patterson@...> 2010/04/26

2010/4/21 NARUSE, Yui <naruse@airemix.jp>:

[#41060] Re: Windows と DL が使用条件の libffi — Yugui <yugui@...> 2010/04/26

2010/4/26 Aaron Patterson <aaron.patterson@gmail.com>:

[#41067] [Feature #3203] LazySweepGC patch — Narihiro Nakamura <redmine@...>

Feature #3203: LazySweepGC patch

15 messages 2010/04/26
[#41069] Re: [Feature #3203] LazySweepGC patch — Yusuke ENDOH <mame@...> 2010/04/27

遠藤です。

[#41104] Rails3 M17N — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

29 messages 2010/04/30
[#41111] Re: Rails3 M17N — Urabe Shyouhei <shyouhei@...> 2010/04/30

Yukihiro Matsumoto =E3=81=95=E3=82=93=E3=81=AF=E6=9B=B8=E3=81=8D=E3=81=BE=

[#41113] Re: Rails3 M17N — Yukihiro Matsumoto <matz@...> 2010/04/30

まつもと ゆきひろです

[ruby-dev:40959] [Bug #3136] reuse of singleton method definition causes SEGV

From: Yusuke Endoh <redmine@...>
Date: 2010-04-12 13:45:39 UTC
List: ruby-dev #40959
Bug #3136: reuse of singleton method definition causes SEGV
http://redmine.ruby-lang.org/issues/show/3136

起票者: Yusuke Endoh
ステータス: Open, 優先度: Normal
Target version: 1.9.2
ruby -v: ruby 1.9.2dev (2010-04-12 trunk 27317) [i686-linux]

遠藤です。

以下で SEGV します。


  def overlaid(obj)
    class << obj
      def reverse
        super
      end
    end
  end

  overlaid(str = "123")   # (1)
  overlaid(ary = [1,2,3]) # (2)
  str.reverse             # (3) => SEGV


一連の流れを説明すると:

  - (1) によって、reverse の iseq が "123" のメソッドとなる。
    (reverse の iseq の klass に「String を継承した特異クラス」
     がセットされる)

  - (2) によって、reverse の iseq が [1,2,3] のメソッドとなる
    (reverse の iseq の klass に「Array を継承した特異クラス」
    が *上書き* される)

  - (3) によって、String のインスタンスを self として reverse
    の iseq が実行される。その中の super で現在実行中の iseq
    の klass (= Array を継承した特異クラス) を元に呼び出す
    メソッドを決める。すると Array#reverse が選ばれてしまう。

  - String のインスタンスを self として rb_ary_reverse が実行
    されてしまう。

iseq の klass に super のコンテキスト情報を持たせている設計が
バグだと思いました。


解決方法としては、

  1. rb_iseq_t 以外で super のコンテキスト情報を管理する
     (Ruby レベルのメソッドでも rb_method_entry_t の klass を
      使うようにする?)

  2. メソッドを定義するたびに rb_iseq_t を複製する

を思いつきましたが、どちらも結構タフそうな変更です。

安定させるのに時間がかかることが予想されるため、がんばって
早く直してください > ささださん。


また、[ruby-dev:40458] の修正も急ぎ目でお願いします。

-- 
Yusuke Endoh <mame@tsg.ne.jp>


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next