From: "shugo (Shugo Maeda)" Date: 2013-07-18T14:46:01+09:00 Subject: [ruby-dev:47521] [ruby-trunk - Bug #8652] gem で rb_secure(4) を使用するとビルドエラーとなる Issue #8652 has been updated by shugo (Shugo Maeda). naruse (Yui NARUSE) wrote: > > > linux で ruby-fcgi(https://github.com/saks/ruby-fcgi) という rb_secure(4) を使っている gem を trunk でコンパイルしようと失敗してしまいます。 > > > > blameしたところなかださんがr41273で変更されているようです。 > > コンパイルエラーメッセージの通り、その意図の是非はおいておいて、意図的なものですね。 はい、そう思います。 > > 個人的には、$SAFEを4以上にセットするコードはエラーにすべきですが、rb_secure(4)のようなコードはビルドできた方がよいと考えています。 > > 実行時にエラーでこけるより、コンパイル時にこけたほうが早く気付けて良いのではないですか? rb_secure(4)は$SAFEを4以上にセットするものではなく、$SAFEが4以上にセットされている時にSecurityErrorを発生されるものです。 # おおざっぱに言えば、rb_secure(4)はif $SAFE >= 4; raise SecurityError; endのような意味です。 trunkでは$SAFEを4以上にセットできないので、rb_secure(4)で実行時に例外が発生することはないはずですが、何か勘違いしているでしょうか。 rb_secure(4)が残っていてもごくわずかなオーバーヘッドがあるだけで実害はないと思いますので、サードパーティの拡張ライブラリのことも考えると、互換性のためにコンパイルエラーとしない方がよいと考えています。 sorah (Shota Fukumori) wrote: > ビルドがこけるので良い気がしています。 なぜこけた方がよいと思いますか? ---------------------------------------- Bug #8652: gem で rb_secure(4) を使用するとビルドエラーとなる https://bugs.ruby-lang.org/issues/8652#change-40559 Author: hsbt (Hiroshi SHIBATA) Status: Assigned Priority: High Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-07-18 trunk 42031) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN linux で ruby-fcgi(https://github.com/saks/ruby-fcgi) という rb_secure(4) を使っている gem を trunk でコンパイルしようと失敗してしまいます。 $ make compiling fcgi.c (snip) fcgi.c:231:3: エラー: call to ‘ruby$safe_level$4’ declared with attribute error: $SAFE=4 is obsolete fcgi.c: 関数 ‘fcgi_stream_putc’ 内: fcgi.c:219:3: エラー: call to ‘ruby$safe_level$4’ declared with attribute error: $SAFE=4 is obsolete make: *** [fcgi.o] エラー 1 Mac OS X 10.8.4 だと上記のエラーは発生しません。 エラーが発生する linux の gcc は gcc バージョン 4.6.4 (Funtoo 4.6.4) です。 -- http://bugs.ruby-lang.org/