[#46143] るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果 — eiichi_maekawa@...

62 messages 2009/07/02
[#46153] Re: るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果 — "NARUSE, Yui" <naruse@...> 2009/07/03

成瀬です。

[#46165] Re: に関する1.8.6→1.8.7または、1.9へのバージョンアップ — eiichi_maekawa@... 2009/07/05

前川です。

[#46281] rubyの変数の扱いについて — "前川 映一" <eiichi_maekawa@...> 2009/08/17

前川です。

[#46283] Re: rubyの変数の扱いについて — "(株)ネットフォレスト 植田裕之" <ueda@...> 2009/08/17

植田と申します。

[#46146] 文字変換 — eiichi_maekawa@...

16 messages 2009/07/03
[#46147] Re: 文字変換 — Hidetoshi NAGAI <nagai@...> 2009/07/03

永井@知能.九工大です.

[#46148] Re: 文字変換 — eiichi_maekawa@... 2009/07/03

前川です。

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

From: Kazuhiko <kazuhiko@...>
Date: 2009-07-31 08:25:35 UTC
List: ruby-list #46246
かずひこです。
分かる範囲で補足します。

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)"が出るのかわかっていませんが、他に何か調べる
べきことはありますか?

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

Attachments (1)

tdiary.rb.avoid_security_error.diff (621 Bytes, text/x-diff)
Index: tdiary.rb
===================================================================
--- tdiary.rb	(revision 3488)
+++ tdiary.rb	(working copy)
@@ -278,7 +278,11 @@
 
 		def each_referer( limit = 10 )
 			newer_referer
-			@referers.values.sort.reverse.each_with_index do |ary,idx|
+			# dirty workaround to avoid recursive sort that
+			# causes SecurityError in @secure=true
+			# environment since
+			# http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=16081
+			@referers.values.sort_by{|e| "%08d_%s" % e}.reverse.each_with_index do |ary,idx|
 				break if idx >= limit
 				yield ary[0], ary[1]
 			end

In This Thread

Prev Next