2009年7月31日

[ruby-list:46246] Re: ruby-1.8.7で"Insecure: can't modify hash(SecurityError)"

かずひこです。
分かる範囲で補足します。

Kazuhiko wrote:
> 添付のように、最近のruby-1.8系でtDiaryのセキュアモード($SAFE=4)で
> "Insecure: can't modify hash (SecurityError)"というエラーが起き、遡って
> みると、
>

> http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=16081
> Author: knu
> Date: Sat Apr 19 11:11:25 2008 UTC (15 months, 1 week ago)
> Log Message:
>
> * array.c (rb_ary_equal, rb_ary_eql, rb_ary_hash, rb_ary_cmp):
> Make Array#eql?, #hash, #== and #<=> use rb_exec_recursive() and
> handle recursive data properly.
>
> * hash.c (hash_equal, rb_hash_hash): Make Hash#eql?, #hash and #==
> use rb_exec_recursive() and handle recursive data properly.
>
> ↑この変更以降、このエラーが起きることがわかりました。
>
> ちなみに、現在のruby_1_8ブランチの最新(rev.24312)に、上記の差分を逆適
> 応すれば、このエラーは起きません。sortで"can't modify hash"と言われるの
> はバグのような気がするのですが、どうでしょうか?

@referers.values.sort.reverse.each_with_index do |ary,idx|
のsortのところでエラーになっていて、ここでのsort対象は、
[
[2, "http://..."],
[1, "http://..."]
]
みたいなArrayなのですが(リファラの方はtaintedだけど、これをuntaintして
も状況は変わらず)、これをsortする際に、(array.cの)'handle recursive
data properly'の変更のためにSecurity Errorが出ているようです。

そこで、添付のようなdirty hackでwork aroundになるのを確認しました。

r.16081の(array.cの)変更で、なぜここで$SAFE=4の際に"Insecure: can't
modify hash (SecurityError)"が出るのかわかっていませんが、他に何か調べる
べきことはありますか?

よろしくお願いします。
かずひこ


filename="tdiary.rb.avoid_security_error.diff"

SW5kZXg6IHRkaWFyeS5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZGlhcnkucmIJKHJldmlzaW9u
IDM0ODgpCisrKyB0ZGlhcnkucmIJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw3ICsyNzgsMTEg
QEAKIAogCQlkZWYgZWFjaF9yZWZlcmVyKCBsaW1pdCA9IDEwICkKIAkJCW5ld2VyX3JlZmVy
ZXIKLQkJCUByZWZlcmVycy52YWx1ZXMuc29ydC5yZXZlcnNlLmVhY2hfd2l0aF9pbmRleCBk
byB8YXJ5LGlkeHwKKwkJCSMgZGlydHkgd29ya2Fyb3VuZCB0byBhdm9pZCByZWN1cnNpdmUg
c29ydCB0aGF0CisJCQkjIGNhdXNlcyBTZWN1cml0eUVycm9yIGluIEBzZWN1cmU9dHJ1ZQor
CQkJIyBlbnZpcm9ubWVudCBzaW5jZQorCQkJIyBodHRwOi8vc3ZuLnJ1YnktbGFuZy5vcmcv
Y2dpLWJpbi92aWV3dmMuY2dpP3ZpZXc9cmV2JnJldmlzaW9uPTE2MDgxCisJCQlAcmVmZXJl
cnMudmFsdWVzLnNvcnRfYnl7fGV8ICIlMDhkXyVzIiAlIGV9LnJldmVyc2UuZWFjaF93aXRo
X2luZGV4IGRvIHxhcnksaWR4fAogCQkJCWJyZWFrIGlmIGlkeCA+PSBsaW1pdAogCQkJCXlp
ZWxkIGFyeVswXSwgYXJ5WzFdCiAJCQllbmQK

投稿者 xml-rpc : 2009年7月31日 17:25
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/87170
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。