https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2008-12-16T22:57:19Z
Ruby Issue Tracking System
Ruby master - Bug #884: Insecure operation: -r
https://bugs.ruby-lang.org/issues/884?journal_id=2095
2008-12-16T22:57:19Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul><li><strong>Assignee</strong> set to <i>ko1 (Koichi Sasada)</i></li></ul><p>=begin</p>
<p>=end</p>
Ruby master - Bug #884: Insecure operation: -r
https://bugs.ruby-lang.org/issues/884?journal_id=2169
2008-12-20T22:55:40Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="/issues/884">[ruby-dev:37446]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Insecure operation: -r (Closed)" href="https://bugs.ruby-lang.org/issues/884">#884</a>] Insecure operation: -r"<br>
on Mon, 15 Dec 2008 19:58:41 +0900, Kazuhiro NISHIYAMA <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a> writes:</p>
<p>|以下のようにするとエラーメッセージの中に謎の-rが出てきます。<br>
|<br>
|% ruby-trunk -ve '$SAFE=4;open("")'<br>
|ruby 1.9.1 (2008-12-14 revision 20736) [i686-linux]<br>
|-e:1:in <code>open': Insecure operation: -r (SecurityError) | from -e:1:in </code>'<br>
|%</p>
<p>メソッド(open)の中でrb_check_safe_obj()が呼ばれてエラーになっ<br>
た時、そのメソッドがトップレベルで呼ばれた場合、<br>
rb_frame_callee()がNULLであるため、-rで発生したエラーと勘違<br>
いするせいのようです。</p>
<p>rb_check_safe_obj()では、トップレベルで呼ばれたメソッドと、<br>
実行環境が発生する前(-r)を区別する必要がありそうです。どうやっ<br>
て区別できるのかちょっと調べてみますね。</p>
<p>=end</p>
Ruby master - Bug #884: Insecure operation: -r
https://bugs.ruby-lang.org/issues/884?journal_id=2302
2008-12-25T00:04:46Z
ko1 (Koichi Sasada)
<ul></ul><p>=begin<br>
ささだです.</p>
<p>Yukihiro Matsumoto wrote::</p>
<blockquote>
<p>|以下のようにするとエラーメッセージの中に謎の-rが出てきます。<br>
|<br>
|% ruby-trunk -ve '$SAFE=4;open("")'<br>
|ruby 1.9.1 (2008-12-14 revision 20736) [i686-linux]<br>
|-e:1:in <code>open': Insecure operation: -r (SecurityError) | from -e:1:in </code>'<br>
|%</p>
<p>メソッド(open)の中でrb_check_safe_obj()が呼ばれてエラーになっ<br>
た時、そのメソッドがトップレベルで呼ばれた場合、<br>
rb_frame_callee()がNULLであるため、-rで発生したエラーと勘違<br>
いするせいのようです。</p>
<p>rb_check_safe_obj()では、トップレベルで呼ばれたメソッドと、<br>
実行環境が発生する前(-r)を区別する必要がありそうです。どうやっ<br>
て区別できるのかちょっと調べてみますね。</p>
</blockquote>
<p> そもそも,rb_frame_callee() が caller を見るのが良くないですね.<br>
rb_f_method_name() の名前に引っ張られて,本来 rb_frame_caller() といった<br>
名前にするところを rb_frame_callee() という名前にしているのが良くない.</p>
<p> というわけで,こんなパッチを書いてみましたがどうでしょうか.</p>
<a name="Index-evalc"></a>
<h1 >Index: eval.c<a href="#Index-evalc" class="wiki-anchor">¶</a></h1>
<p>--- eval.c (リビジョン 20968)<br>
+++ eval.c (作業コピー)<br>
@@ -750,6 +750,12 @@ rb_frame_this_func(void)<br>
ID<br>
rb_frame_callee(void)<br>
{</p>
<ul>
<li>return frame_func_id(GET_THREAD()->cfp);<br>
+}</li>
<li>
</ul>
<p>+static ID<br>
+rb_frame_caller(void)<br>
+{<br>
rb_thread_t *th = GET_THREAD();<br>
rb_control_frame_t <em>prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp);<br>
/</em> check if prev_cfp can be accessible */<br>
@@ -1105,7 +1111,7 @@ rb_f_local_variables(void)<br>
static VALUE<br>
rb_f_method_name(void)<br>
{</p>
<ul>
<li>ID fname = rb_frame_callee();</li>
</ul>
<ul>
<li>
<p>ID fname = rb_frame_caller(); /* need <em>caller</em> ID */</p>
<p>if (fname) {<br>
return ID2SYM(fname);</p>
</li>
</ul>
<p>--<br>
// SASADA Koichi at atdot dot net</p>
<p>=end</p>
Ruby master - Bug #884: Insecure operation: -r
https://bugs.ruby-lang.org/issues/884?journal_id=2369
2008-12-27T16:27:06Z
ko1 (Koichi Sasada)
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>=begin<br>
Applied in changeset r21093.<br>
=end</p>