Invalid CFP in rb_protect

e$B%o%J%Y$G$9!#e(B

1.9 trunke$B$G0J2<$N$h$&$J%F%9%H%3!<%I$rF0$+$9$He(B
[BUG] cfp consistency error - call0 e$B$GMn$A$^$9!#e(B

— e$B$3$3$+$ie(B
class A
def inspect
raise
end
end

class B
def initialize
@a = A.new
undefined_method
end
end

B.new
— e$B$3$3$^$Ge(B

NameError e$B$N%a%C%;!<%8$r:n@.$9$k$H$-$N!“e(Binspect
e$B$N8F$S=P$7$K$+$^$;$F$$$ke(B
rb_protect e$B$,860x$N$h$&$G$9!#e(B
e$B0J2<!”%Q%C%A$G$9!#e(B

Index: eval.c

— eval.c (revision 12109)
+++ eval.c (working copy)
@@ -1390,6 +1390,8 @@
{
VALUE result = Qnil; /* OK */
int status;

  • rb_thread_t *th = GET_THREAD();

  • rb_control_frame_t *reg_cfp = th->cfp;

    PUSH_THREAD_TAG();
    if ((status = EXEC_TAG()) == 0) {
    @@ -1400,6 +1402,7 @@
    *state = status;
    }
    if (status != 0) {

  • th->cfp = reg_cfp;
    return Qnil;
    }

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30671] invalid CFP in rb_protect”
on Fri, 23 Mar 2007 10:25:44 +0900, wanabe [email protected]
writes:

|1.9 trunke$B$G0J2<$N$h$&$J%F%9%H%3!<%I$rF0$+$9$He(B
|[BUG] cfp consistency error - call0 e$B$GMn$A$^$9!#e(B

|NameError e$B$N%a%C%;!<%8$r:n@.$9$k$H$-$N!“e(Binspect e$B$N8F$S=P$7$K$+$^$;$F$$$ke(B
|rb_protect e$B$,860x$N$h$&$G$9!#e(B
|e$B0J2<!”%Q%C%A$G$9!#e(B

e$B$5$5$@$/$s$+$i%U%)%m!<$,$“$j$^$;$s$,!”$3$N%Q%C%AEv$F$F$b$$$$e(B
e$B$G$9$+!)e(B

e$B%o%J%Y$5$s!"$^$D$b$H$5$se(B

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

Yukihiro M. wrote:

|1.9 trunke$B$G0J2<$N$h$&$J%F%9%H%3!<%I$rF0$+$9$He(B
|[BUG] cfp consistency error - call0 e$B$GMn$A$^$9!#e(B

|NameError e$B$N%a%C%;!<%8$r:n@.$9$k$H$-$N!“e(Binspect e$B$N8F$S=P$7$K$+$^$;$F$$$ke(B
|rb_protect e$B$,860x$N$h$&$G$9!#e(B
|e$B0J2<!”%Q%C%A$G$9!#e(B

e$B$5$5$@$/$s$+$i%U%)%m!<$,$"$j$^$;$s$,!"$3$N%Q%C%AEv$F$F$b$$$$e(B
e$B$G$9$+!)e(B

e$B!!$9$$^$;$s!“K:$l$F$$$^$7$?!#$o$6$o$6LdBj$^$GFCDj$7$F$$$?$@$-$”$j$,$H$&e(B
e$B$4$6$$$^$7$?!#=$@5$bLdBj$J$$$H;W$$$^$9$N$G%3%
%C%H$5$;$F$$$?$@$-$^$9!#e(B