From: Kazuhiko Date: 2011-10-04T19:02:02+09:00 Subject: [ruby-dev:44575] Re: [Ruby 1.9 - Bug #5279] $SAFEが3以上の時にString#encodeがSecurityErrorを発生させるケースがある On 28/09/2011 14:15, Kazuhiko wrote: > On 26/09/2011 19:19, Shugo Maeda wrote: >>>> Yuguiさんが1.9.3ブランチにバックポートしてくださって、先ほどめでたく >>>> 1.9.3RC1が出た今ころになって気づいて、ものすごく申し訳ないのです >>>> が、$SAFE=3の時は動くけれど、$SAFE=4だと相変わらず失敗するようです。 >> (snip) >>> r33328 で直ったようですが、1.9.3に入れますか?みなさんの意見が聞きたいです。 >>> 正直ぼくのなかでは重要度は微妙なんですけど、このままだた1.9.[234] でそれぞれ >>> 仕様が違うという事態になるので、それもいかがなものかと思い悩んでいます。 >> >> アプリケーション側のworkaroundとしては、$SAFE >= 4のサンドボックス内で >> 使用を許可したい変換表を$SAFE == 0のときにあらかじめロードしておくとい >> う手があるので、tDiaryのケースでそれが現実的な解となるかどうかが、一つの >> 判断材料ですね。 > > Yuguiさんの言うように、重要度は微妙というのには同意します。すくなくとも > tDiary的には、上記のワークアラウンドですでに回避できているので、まあ困ら > ないといえば困りません。 えーと、さらに調査の結果、encodingによっては上記のワークアラウンドでうま く動かないことがわかりました。 例えば、 $ ruby1.9 -ve 'a="あ";"あ".encode("euc-jp"); $SAFE=4; a.encode("euc-jp")' ruby 1.9.3dev (2011-09-23 revision 33323) [x86_64-linux] ↑これは動きますが、 $ ruby1.9 -ve 'a="あ";"".encode("euc-jp"); $SAFE=4; a.encode("euc-jp")' ruby 1.9.3dev (2011-09-23 revision 33323) [x86_64-linux] -e:1:in `encode': Insecure operation - encode (SecurityError) from -e:1:in `
' ↑これは動きません。 この「あらかじめロードする」技が、対象となるStringと関係なく動くわけでは ないとなれば、残念ながらワークアラウンドになりません。 なお、1.9.3RC1にr33328を適用すれば、もちろん無事に動きます。 というわけで、引き続き重要度が微妙なのは同意しますが、「レンタルtDiaryを Ruby-1.9で動かしている数少ない管理人の一人」としては1.9.3に入ると嬉し い、という感じです。 # とりあえず運用環境では1.9.3RC1にr33328を適用して動かすことにしました。 かずひこ