トップ «前の日記(2007年06月03日 (日)) 最新 次の日記(2007年06月05日 (火))» 編集

*Messages*

Search

書いてる人: しまだみつのぶ (aka. simm, saica)

最新情報URL: https://gouketsu.net/simm/d/

"8024402C"でたどり着かれた方はこちら: 「壁の内側からWindowsUpdateに失敗する


2007年06月04日 (月) ruby-1.8.6 でハマる [長年日記]

1 [ruby][www] ruby-1.8.6 + hiki-0.8.6

会社のサーバで ruby-1.8.2 + hiki-0.8.2 の組み合わせが動いているのだが、サーバのリプレース予定があり、リプレースついでに、ruby-1.8.6 + hiki-0.8.6 の組み合わせに置き換えることを検討。

HikiFarmが作る.cgiや.confを一斉に置換し、動かしたところ、問題なさげに動いた。ひとまず安心し、無意識のうちに「編集」をクリックしたところ、

wrong number of arguments (1 for 0) (ArgumentError)
/var/www/apps/hiki/hiki/storage.rb:46:in `initialize'
/var/www/apps/hiki/hiki/storage.rb:46:in `new'
/var/www/apps/hiki/hiki/storage.rb:46:in `md5hex'
/var/www/apps/hiki/hiki/command.rb:306:in `cmd_edit'
/var/www/apps/hiki/hiki/command.rb:76:in `dispatch'
/usr/lib/ruby/1.8/timeout.rb:56:in `timeout'
/var/www/apps/hiki/hiki/command.rb:71:in `dispatch'
/var/www/apps/hiki/hiki.cgi:32
/var/www/apps/hiki/hiki/storage.rb:14:in `open_db'
/var/www/apps/hiki/hiki.cgi:30
/var/www/html/hikifarm/test/index.cgi:5:in `load'
/var/www/html/hikifarm/test/index.cgi:5

とエラー発生。すんなりいかないようだ。

storage.rb:46

ソースを見たところ

Digest::MD5::new( s || '' ).hexdigest

とある。どうやら、ruby-1.8.6 では、これが気に入らないらしい。 hiki の CVS HEAD を見たところ、同じ部分は

Digest::MD5::hexdigest( s || '' )

となっていたので、書き換えたところ、無事動いた。

2 [ruby][www] ruby-1.8.6 + kagemai-0.8.6

会社のサーバで ruby-1.8.2 + kagemai-0.8.6 の組み合わせが動いているのだが、サーバのリプレース予定があり、リプレースついでに、ruby-1.8.6 + kagemai-0.8.6 の組み合わせに置き換えることを検討。

各.cgiや.confを書き換え、動かしたところ、

Following errors occurred. Please contact administrator.

Insecure: can't intern tainted string (SecurityError)

とエラー発生。いったいどこで…

直接cgiファイルを動かす

どこでエラーが発生しているかは、cgiを直接起動すればわかるだろうと、シェル上から

echo '' | ruby ./guest.cgi

としたところ、果たして、

/var/www/var/kagemai/lib/kagemai/message_bundle.rb:69:in `intern': Insecure: can't intern tainted string (SecurityError)

とエラーメッセージが。message_bundle.rbの69行目は

@messages[key.intern] = message

とある。どうやら、key.internが気に入らない模様。taint 文字列の intern が SecurityError 例外が発生するように変更されたことが原因らしい。

message_bundle.rb の65行目

key = key.to_s.strip

に相当する部分が、影舞の stable-0_8 ブランチでは

key = key.to_s.strip.untaint

となっているので、このように書き換え、再度実行。

しかし、またまた同じエラーが。まだ、untaintが足りないらしい…

再びエラー発生箇所を確認

今度は

/var/www/var/kagemai/lib/kagemai/reporttype.rb:174:in `intern': Insecure: can't intern tainted string (SecurityError)

とあった。

reporttype.rbの174行目は

attr_u[key.intern.to_s.untaint] = value.dup.untaint

となっている。

attr_u[key.untaint.intern.to_s.untaint] = value.dup.untaint

に書き換えたところ

Following errors occurred. Please contact administrator.

can't modify frozen object (TypeError)

となるので、

attr_u[key.dup.untaint.intern.to_s.untaint] = value.dup.untaint

と変更したところ、ようやく動いた。

ちなみに

install_ja.rb を使ってインストールしようとすると、hiki-0.8.6と同様、Digest::MD5::new() で引っかかる。同様に Digest::MD5::hexdigest() に書き換える必要がある。

3 [rail] 乗車車両 (2007-06-04)

出勤

自動車利用のため、乗車車両なし。

帰宅: 会社前のバス停からバスにて天理駅まで

FL22(8922) → X58(8108)


Information

更新情報取得方法

*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナLIRSからも取得可能です。