2006年12月31日(日) 大晦日は花火 [同日]
● [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)
[ツッコミを入れる]
ツッコミ・コメントがあればどうぞ! spam対策でE-mail欄は隠してあります。もしE-mail欄が見えていても、何も入力しないで下さい。
脳味噌から汁が出るくらい考える。こともある。
最近のツッコまれどころ