2006年12月31日(Sun) 大晦日は花火 [同日]
● [tDiary] 後日談プラグイン (リビジョン 1.15)
前回のリリースから少し時間が空きました。動作は変わらないまま、@secure=true
な日記で使えるようになったはずです。あとは、設定できる項目を追加したら、標準添付プグインに入れてもらおうかな。初めての方は、言語リソースもお使いください。
手元では動作を確認しましたが、念のため、リビジョン1.14も残しておきます。
@secure=true
な日記への対応は思ったほど難しくはありませんでした。add_ナントカ_proc
で追加したブロックが$SAFE=4の中でcallされても$SAFEの制限を受けてないみたいだ。えーと。ちゃんと確かめよう。
$ cat unsafe.rb $SAFE=4 File.open('test.txt','w'){|f| f.puts 'Hello world'} $ ruby unsafe.rb unsafe.rb:2:in `initialize': Insecure operation - initialize (SecurityError) from unsafe.rb:2
$SAFE=4
でFile.open
すればSecurityError
が出る。で、
$ cat testproc.rb class Plugin def add_proc(block = Proc::new); @proc = block; end def execute; @proc.call; end end plugin = Plugin.new plugin.add_proc{File.open('test.txt','w'){|f| f.puts 'Hello world'}} $SAFE=4 plugin.execute $ rm -f test.txt; ruby testsafe.rb; cat test.txt Hello world
へぇ。(ruby 1.8.4 (2005-12-24) [i686-linux]とruby 1.8.5 (2006-09-06) [alpha-netbsd]*1)
というわけで、myプラグインの評価中にキャッシュにアクセスしないようにすればよいわけでした。簡単かんたん…というわけでもなかった。
やっぱりあるセクションからmyプラグインを消えたことをちゃんと検出するのは難しかった。そういうわけで、テストケース付きのプラグインになったわけです。もしかしたら世界初か♪
*1 このホストにはもう1.8.5が入っていた。ありがとう!smj
● ではでは、2007年もどうぞよろしくお願いします。(22:50 HST)
[ツッコミを入れる]
最近のツッコまれどころ