«前の日記(2011-02-28) 最新 次の日記(2011-03-04)» 編集

会長@腹部日記


2011-03-02 [長年日記]

_ $SAFE = 1になったら、プラグイン内の open-uriでSecurity Error が出る場合がある・・

tDiary 3.0.1.20110227版 + ruby 1.9.2-p180でプラグイン内でopen-uriを使うと、 以下のようなエラーが出るようになってしまった。*1

出るプラグイン・出ないプラグインの区別がつかない。。。今回はbitly.rbでした。

500 Internal Server Error

Insecure operation - write (SecurityError)

/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:373:in `write'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:373:in `<<'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:373:in `<<'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:322:in `block (3 levels) in open_http'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/protocol.rb:387:in `call_block'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/protocol.rb:378:in `<<'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/protocol.rb:88:in `read'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:2424:in `read_body_0'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:2379:in `read_body'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:321:in `block (2 levels) in open_http'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:1194:in `block in transport_request'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:2342:in `reading_body'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:1193:in `transport_request'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:1177:in `request'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:312:in `block in open_http'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/net/http.rb:627:in `start'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:306:in `open_http'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:768:in `buffer_open'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:201:in `catch'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:670:in `open'
/home/tamoot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb:33:in `open'
(plugin/bitly.rb):29:in `bitly'
(TDiary::Plugin#eval_src):72:in `block in eval_src'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:786:in `eval'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:786:in `block in eval_src'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:113:in `block in safe'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:111:in `call'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:111:in `safe'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:785:in `eval_src'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:1139:in `do_eval_rhtml'
/home/tamoot/workspace/github/tdiary-core/tdiary.rb:1076:in `eval_rhtml'
/home/tamoot/workspace/github/tdiary-core/tdiary/dispatcher.rb:102:in `run'
/home/tamoot/workspace/github/tdiary-core/tdiary/dispatcher.rb:242:in `dispatch_cgi'
/home/tamoot/workspace/github/tdiary-core/index.rb:35:in `<top (required)>'
<internal:lib/rubygems/custom_require>:29:in `require'
<internal:lib/rubygems/custom_require>:29:in `require'
index.rb:2:in `<main>'

現象発生の引き金

$SAFE = 1で動くようになったこの修正が原因と思われます。*2

irbで試しても全く再現しない

ので、下記の修正でお茶を濁すことにした。。。

/home/tamooot/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/open-uri.rb

  class Buffer # :nodoc:
    def initialize
      @io = StringIO.new
      @size = 0
    end
    attr_reader :size
    StringMax = 10240
    def <<(str)
      @io << "#{str}"
#      @io << str

Tags: tDiary Ruby

*1 ruby 1.9系だと多分どれでも同じ?

*2 この修正が良い悪いは別として。。。

本日のツッコミ(全3件) [ツッコミを入れる]
_ kayakaya (2011-03-02 13:16)

open-uriを利用している箇所をNet::HTTPで書き換えた場合は、エラーにならないですね。パッチはこちら。https://gist.github.com/850906<br>ただ、bitlyの正常動作を知らないのでontribにコミットはしてませんが(それに今開発マシンが手元にないので……)。

_ ただただし (2011-03-02 14:06)

リダイレクトが発生すると、セキュリティエラーになるのはopen-uriの困った仕様なのです……

_ 会長@腹部 (2011-03-03 03:24)

わかってる限りでは、instagr.rbとbitly.rbなのでNet::HTTPに置き換えた修正を後でコミットしようと思います。他のプラグインでopenしているURLも、いつリダイレクトされちゃうかわかったものではないですね。。。