おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


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=4File.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)

[run] 12月の走行距離 マラソン前 28km マラソン後 35km

そうそう。やっぱりマラソンが終わるとダラけるのな。3週間で7回。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>