Ruby-1.8.6, $SAFE=4, Proc#call

e$B31$H$$$$$^$9!#e(B

e$B0lEY!"$^$D$b$H$5$s$K$O;d?.$G<ALd$7$?$N$G$9$,!"$;$C$+$/$J$N$Ge(BMLe$B$K$bEj$2$^$9!#e(B

Proc#calle$B$He(Byielde$B$G!“e(BProce$B$,<B9T$5$l$k:]$Ne(B$SAFEe$B$,0[$J$j$^$9!#e(B
e$B$^$D$b$H$5$s$Oe(BProc#calle$B$N5sF0$,0U?^$7$?$b$N$G$”$k!"$H$N$3$H$G$7$?!#e(B(e$B$"$C$F$^$9$+e(B?>e$B$^$D$b$H$5$se(B)

yielde$B$N5sF0$re(BProc#calle$B$HB7$($kM=Dj$O$"$j$^$9$+e(B?

e$B%9%l%C%I$r:n$C$Fe(B$SAFE =
4e$B$G$J$K$+$r<B9T$9$k$N$Ke(Byielde$B$r$h$/;H$C$F$$$?$N$G$9$,!“e(B
yielde$B$be(BProc#calle$B$N5sF0$KB7$($k$H$9$k$H!”$A$g$C$HLLE]$G$9!#e(B


$SAFE=4e$B$N%9%l%C%I$+$ie(BProc#calle$B$7$?>l9g!"e(BProce$B$r:n$C$?%3%s%F%-%9%H$Ne(Bsafe_levele$B$Ge(B
Proce$B$,<B9T$5$l$k$h$&$G$9!#e(Byielde$B$9$k>l9g$K$O!"e(Bsafe_levele$B$,0z$-7Q$,$l$^$9!#e(B

e$B$3$l$O0U?^$7$?F0:n$G$7$g$&$+!)e(B
e$B$J$s$H$J$/%P%0$J5$$,$7$^$9!#e(B

e$BNc$($P$3$s$J%9%/%j%W%H$G<B83$G$-$^$9!#e(B
four_proce$B$NJ}$Oe(B$SAFE=4e$B$N$O$:$J$N$KI8=`=PNO$K0u;z$G$-$^$9!#e(B

safe.rb

def four_proc(&block)
Thread.new { $SAFE = 4; block.call }.join
end

def four_yield
Thread.new { $SAFE = 4; yield }.join
end

four_proc { p :proc }
four_yield { p :yield }

e$B<B9T7k2Le(B

cinq:~/develop/labo/ruby/misc mas$ ruby safe.rb
:proc
safe.rb:10:in write': Insecure operationwrite’ at level 4
(SecurityError)
from safe.rb:6:in join' from safe.rb:6:infour_yield’
from safe.rb:10

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

In message “Re: [ruby-dev:30705] ruby-1.8.6, $SAFE=4, Proc#call”
on Tue, 10 Apr 2007 00:27:15 +0900, Masatoshi SEKI
[email protected] writes:

|Proc#calle$B$He(Byielde$B$G!“e(BProce$B$,<B9T$5$l$k:]$Ne(B$SAFEe$B$,0[$J$j$^$9!#e(B
|e$B$^$D$b$H$5$s$Oe(BProc#calle$B$N5sF0$,0U?^$7$?$b$N$G$”$k!“$H$N$3$H$G$7$?!#e(B(e$B$”$C$F$^$9$+e(B?>e$B$^$D$b$H$5$se(B)
|
|yielde$B$N5sF0$re(BProc#calle$B$HB7$($kM=Dj$O$"$j$^$9$+e(B?
|
|e$B%9%l%C%I$r:n$C$Fe(B$SAFE = 4e$B$G$J$K$+$r<B9T$9$k$N$Ke(Byielde$B$r$h$/;H$C$F$$$?$N$G$9$,!“e(B
|yielde$B$be(BProc#calle$B$N5sF0$KB7$($k$H$9$k$H!”$A$g$C$HLLE]$G$9!#e(B

e$B$^$:!“e(BProce$B$O85$N>l=j$Ne(B$SAFEe$B$N>uBV$r3P$($F$$$^$9$+$i!“e(B
Proc#calle$B$N5sF0$O0U?^DL$j$G$9e(B(e$B$”$C$F$^$9e(B)e$B!#$3$l$O?.Mj$G$-$ke(B
e$B%3!<%I$+$I$&$+$O$=$NJ8L.$G7h$^$k$HG’<1$7$F$$$k$+$i$G$9!#?.Mje(B
e$B$G$-$J$$%3!<%I$+$i8F$P$l$F$b!”%V%m%C%/$N?.Mj@-$,2<$,$k$o$1$Ge(B
e$B$O$J$$!#$7$+$7!“8=>ue(Byielde$B$O85$N%3%s%F%-%9%H$Ne(B$SAFEe$B$N>uBV$rI|e(B
e$B85$7$^$;$s$+$i!”$3$NE@$G0l4S@-$,L5$$$H8@$($k$G$7$g$&!#e(B

e$B$G$9$+$i!"e(B(e$B$I$N%?%$%%s%0$+$A$g$C$H7h$a$+$M$^$9$,e(B)e$B$$$:$lB7$(e(B
e$B$k$Y$-$G$7$g$&!#$,!“0l;~E*$Ke(B$SAFEe$B$rJQ99$7$F%V%m%C%/$r<B9T$7e(B
e$B$?$$$H$$$&%K!<%:$,$”$k$H$$$&$3$H$G$9$+$i!"$=$l$KBP$9$k5
:Q:ve(B
e$B$bF1;~$KMQ0U$7$J$$$H$^$:$$$s$G$7$g$&$M!#e(B

                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)