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 `<main>'

↑これは動きません。

この「あらかじめロードする」技が、対象となるStringと関係なく動くわけでは
ないとなれば、残念ながらワークアラウンドになりません。

なお、1.9.3RC1にr33328を適用すれば、もちろん無事に動きます。

というわけで、引き続き重要度が微妙なのは同意しますが、「レンタルtDiaryを
Ruby-1.9で動かしている数少ない管理人の一人」としては1.9.3に入ると嬉し
い、という感じです。

# とりあえず運用環境では1.9.3RC1にr33328を適用して動かすことにしました。

かずひこ