[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:704

From: Minero Aoki <aamine loveruby.net>
Date: Mon, 26 Dec 2005 03:03:49 +0900 (JST)
Subject: [yarv-dev:704] open> super in define_method in sclass

青木です。

[ruby-core:03856] と同じコードで落ちました。

~/c/yarv % cat t
class X
  def a
  end
  def b
    class << self
      define_method(:a) {
        super
      }
    end
  end
end

x = X.new
x.b
x.a

~/c/yarv % ./miniruby t
t:7: DBG> : "t:15:in `<main>'"
-- stack frame ------------
0x2a95ee2010 (0000): 00000001
0x2a95ee2018 (0001): 2a95eaeeb0
0x2a95ee2020 (0002): 00000004
0x2a95ee2028 (0003): 00000001
0x2a95ee2030 (0004): 2a95eaeeb0
0x2a95ee2038 (0005): 0069b739 <- dfp
0x2a95ee2040 (0006): 00000004 <- bp
-- control frame ----------
c:0004 p:0005 s:0007 b:0006 l:-171 d:0005 PROC   i:block in singletonclass s:         -  
c:0003 p:0039 s:0004 b:0004 l:0003 d:0003 TOP    i:<main>   s:         -  
c:0002 p:-001 s:0001 b:0001 l:0000 d:0000 FINISH i:-        s:         -  
c:0001 p:-001 s:0000 b:-001 l:0000 d:0000 ------ i:-        s:         -  
---------------------------
[BUG] Segmentation fault
ruby 1.9.0 (2005-11-18) [x86_64-linux]

zsh: 1493 abort (core dumped)  ./miniruby t


ちなみに ruby 1.9 では 2004-11-30 に次のように修正されています。

--- eval.c      29 Nov 2004 06:09:40 -0000      1.734
+++ eval.c      30 Nov 2004 04:01:16 -0000      1.735
@@ -3250,6 +3250,9 @@
                }
            }
            if (nd_type(node) == NODE_ZSUPER) {
+               if (ruby_frame->flags & FRAME_DMETH) {
+                   rb_raise(rb_eRuntimeError, "super: specify arguments explicitly");
+               }
                argc = ruby_frame->argc;
                argv = ruby_scope->local_vars + 2;
            }
@@ -5550,6 +5553,7 @@
        break;
 
       case NODE_BMETHOD:
+       ruby_frame->flags |= FRAME_DMETH;
        result = proc_invoke(body->nd_cval, rb_ary_new4(argc, argv), recv, k
lass);
        break;


つまり引数のチェックが足りてないようです。

--
青木峰郎

-- 
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

->     704 2005-12-26 03:03 [aamine loveruby.net ] open> super in define_method in sclass  
       729 2005-12-28 11:04 ┗[ko1 atdot.net       ] fixed> Re: open> super in define_method in sclass
       807 2006-02-04 18:07  ┗[aamine loveruby.net ] close> Re: super in define_method in sclass