[Bug #3136] reuse of singleton method definition causes SEGV

e$B%A%1%C%He(B #3136 e$B$,99?7$5$l$^$7$?!#e(B (by _ wanabe)

e$B%o%J%Y$H?=$7$^$9!#e(B
e$B2r7hJ}K!e(B 1. e$B$O$-$D$=$&$@$C$?$N$G!"e(B2.
e$B$NJ}8~$G;n$7$F$$^$7$?!#e(B
e$B$3$l$GK%A%1%C%H$*$h$Se(B 2502 e$B$OH/>I$7$J$/$J$j$^$7$?!#e(B
e$BJ#@=$9$k$3$H$K$h$kI{:nMQ$K;W$$Ev$?$i$J$$$N$G!"e(B
e$BH?BP$,$J$1$l$P%3%
%C%H$7$F$7$^$*$&$H;W$C$F$$$^$9!#e(B

diff --git a/vm.c b/vm.c
index e62c9a4…a381d3c 100644
— a/vm.c
+++ b/vm.c
@@ -1844,6 +1844,11 @@ vm_define_method(rb_thread_t *th, VALUE obj, ID
id, VALUE iseqval,
rb_iseq_t *miseq;
GetISeqPtr(iseqval, miseq);

  • if (miseq->klass) {
  •   iseqval = rb_iseq_clone(iseqval, 0);
    
  •   GetISeqPtr(iseqval, miseq);
    
  • }
  • if (NIL_P(klass)) {
    rb_raise(rb_eTypeError, “no class/module to add method”);
    }

http://redmine.ruby-lang.org/issues/show/3136

e$B!!$5$5$@$G$9!%e(B

(2010/08/12 18:31), _ wanabe wrote:

e$B2r7hJ}K!e(B 1. e$B$O$-$D$=$&$@$C$?$N$G!"e(B2. e$B$NJ}8~$G;n$7$F$$^$7$?!#e(B
e$B$3$l$GK%A%1%C%H$*$h$Se(B 2502 e$B$OH/>I$7$J$/$J$j$^$7$?!#e(B
e$BJ#@=$9$k$3$H$K$h$kI{:nMQ$K;W$$Ev$?$i$J$$$N$G!"e(B
e$BH?BP$,$J$1$l$P%3%
%C%H$7$F$7$^$*$&$H;W$C$F$$$^$9!#e(B

e$B!!$H$/$K!$B>$KLdBj$,L5$$$h$&$G$7$?$i$*4j$$$7$^$9!%e(B


e$B0J2<!$e(BVM e$B$NCf?H$K4X$9$kM>CL!%e(B

e$B!!$A$J$_$K!$$3$NJU$N@_7W$rA4It$d$jD>$=$&$H9M$($F$$$^$9!%e(B

e$B!!$3$NLdBj!J$b$7$/$O!$JL$NLdBj!K$N:,K\E*$J860x$O!$e(Biseq e$B$,e(B
klass e$B$H$+$re(B
e$B;}$C$F$k!Je(Biseq e$B$rMQ$$$F%a%=%C%I$rDj5A$7$?$H$-!$$=$N%/%i%9$re(B
iseq e$B$,$/$Ce(B
e$B$D$1$k!K$H$$$&@_7W$,$^$:$$!$$H$$$&$3$H$O?tG/A0$+$i5$$K$7$F$$$?$s$G$9$,!$e(B
e$BLLE]$J$N$GJ|CV$7$F$$$^$7$?!%e(B

e$B!!$3$NLdBj$,LLE]$J$N$O!$@EE*$J!Je(Blexical
e$B$J!K>pJs$H!$F0E*$J>pJs!JDj5A$7$?e(B
e$B%/%i%9!$$_$?$$$J!K$r!$$J$s$+$0$A$c$0$A$c$K$7$F$$$ke(B Ruby
e$B$N5sF0$KLdBj$,$"e(B
e$B$k$s$G$9$,!$$5$F!$$=$NJU$,@0M}$G$-$F$$$J$$!$$H$$$&OC$G$9!%e(B

e$B!!e(BRuby 1.8
e$B$^$G$O!$$3$NJU$N@EE*$J>pJs$bF0E*$J>pJs$b!$$9$Y$F<B9T;~$K%9e(B
e$B%?%C%/$K@Q$`$3$H$GLdBj$J$/<B8=$7$F$$$^$7$?!%e(BRHG
e$B$G$$$&!$!Ve(B7e$BK$N%9%?%Ce(B
e$B%/!W$K!$<B9T;~$K@Q$s$G$$$?$o$1$G$9!%e(B

e$B!!e(BRuby 1.9 e$B$H$$$&$+e(B YARV
e$B$NL\I8$O!$9bB.2=$G$9$+$i!$$J$k$Y$/<B9T;~$K2?$+e(B
e$B@Q$`$N$O7y$@$J$!!$$H;W$C$FA4BN$r@_7W$7$F$$$^$9!%$J$N$G!$e(Biseq->klass
e$B$N$he(B
e$B$&$J<BAu$K$J$C$F$$$k$o$1$G$9!%e(B

e$B!!$G!$$$$m$$$m9M$($?$s$G$9$,!$<B9T;~$K!$Kh2s@)8f%U%l!<%$4$H$K@Q$s$G$$$ke(B iseq e$B$r$d$a$F!$$=$NJU$N=t!9$N>pJs!Je(Biseq e$B$H$+!$e(Bklass e$B$H$+!$e(Bcref e$B$H$+!%L>e(B e$BA0$O$^$@L5$$!K$r4^$s$@2?$+$r@Q$$3$H$K$7$h$&$+$H!%$=$N2?$+$O!$%a%=%C%IDje(B
e$B5A$J$s$+$N;~$K!$:n$k$3$H$K$J$j$^$9!%e(B

e$B!!$A$g$C$HLLE]$J$N$O!$$=$N%a%=%C%IDj5A$GMxMQ$5$l$ke(B iseq
e$B$,;2>H$7$F$$$k%Ve(B
e$B%m%C%/$J$I$b!$$=$N2?$+$r@5$7$/;2>H$G$-$J$1$l$P$J$i$J$$!$$H$$$&$3$H$G$7e(B
e$B$?!%$3$3$,!$$3$N<BAu$K$9$k$H$-$NLLE]$JE@$G!$9x$,=E$+$C$?M}M3$G$b$"$j$^$9!%e(B

e$B!!e(BRuby
e$B$N5sF0$,$b$&>/$7$*$H$J$7$1$l$P!$@)8f%U%l!<%`$r$&$^$/$?$I$C$F!$$_e(B
e$B$?$$$J<BAu$b9M$($i$l$k$H;W$&$N$G$9$,!$$J$s$H$+e(B eval
e$B$H$+!$e(Bdefine_method
e$B$H$+$d$C$A$c$&$d$s$A$c$J?M$J$N$G!$$=$l$b$&$^$/$$$-$^$;$s!J2?EY$+9M$($F$_e(B
e$B$?$s$@$1$I!K!%e(B

e$B!!$G!$7k6I%a%=%C%IDj5A;~$K$-$A$s$H$=$NJU$N>pJs$r:F5"E*$K$?$I$C$F@0Hw$9$ke(B
e$B$N$,AaF;$+$J$!!$$H$$$&7kO@$K$J$j$^$7$?!%$N$G!$$=$&<BAu$7$h$&$H;W$C$F$$$^$9!%e(B

e$B%/%i%9Dj5A;~$K$O$I$&$J$k$s$@$m$&!%e(B

defineclass e$BL?Na$H$+$G>pJs$NEAHB$,Av$k$N$+$J!%e(B

e$B!!e(B1.9.3 e$B$G$O!$$3$NJU$NLdBj$,e:No$K@0M}$5$l$F$$$k$H$$$$$J$!!%e(B

e$B%A%1%C%He(B #3136 e$B$,99?7$5$l$^$7$?!#e(B (by _ wanabe)

e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

This issue was solved with changeset r29063.
Yusuke, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


http://redmine.ruby-lang.org/issues/show/3136