操作
バグ #1217
完了非ASCII文字が含まれるURIをDiva::URI.newすると例外が発生する
プラグイン名:
クラッシュする:
はい
説明
コンソールで試すと、直接Addressableを使うケースでは
>>> uri = 'https://こっち.みんな/ておくれ'
Addressable::URI.parse(uri)
#<Addressable::URI:0x3facea12b070 URI:https://こっち.みんな/ておくれ>
のように正しく生成できますが、Diva::URIでは
>>> uri = 'https://こっち.みんな/ておくれ'
Diva::URI.new(uri).host
URI::InvalidURIError: URI must be ascii only "https://\u3053\u3063\u3061.\u307F\u3093\u306A/\u3066\u304A\u304F\u308C"
/home/cobodo/repos/mikutter/core/plugin/console/console.rb:33:in `instance_eval'
/home/cobodo/.rbenv/versions/2.5.1/lib/ruby/2.5.0/uri/rfc3986_parser.rb:73:in `parse'
/home/cobodo/.rbenv/versions/2.5.1/lib/ruby/2.5.0/uri/common.rb:237:in `parse'
/home/cobodo/repos/mikutter/vendor/bundle/ruby/2.5.0/gems/diva-0.3.1/lib/diva/uri.rb:121:in `generate_uri_by_string'
/home/cobodo/repos/mikutter/vendor/bundle/ruby/2.5.0/gems/diva-0.3.1/lib/diva/uri.rb:113:in `generate_uri'
/home/cobodo/repos/mikutter/vendor/bundle/ruby/2.5.0/gems/diva-0.3.1/lib/diva/uri.rb:75:in `to_uri'
/home/cobodo/repos/mikutter/vendor/bundle/ruby/2.5.0/gems/diva-0.3.1/lib/diva/uri.rb:104:in `method_missing'
(eval):3:in `block (3 levels) in <top (required)>'
/home/cobodo/repos/mikutter/core/plugin/console/console.rb:33:in `instance_eval'
/home/cobodo/repos/mikutter/core/plugin/console/console.rb:33:in `block (3 levels) in <top (required)>'
/home/cobodo/repos/mikutter/core/mui/gtk_extension.rb:35:in `block in safety_signal_connect'
/home/cobodo/repos/mikutter/core/plugin/gtk/mainloop.rb:10:in `main'
/home/cobodo/repos/mikutter/core/plugin/gtk/mainloop.rb:10:in `mainloop'
./mikutter.rb:68:in `boot!'
./mikutter.rb:104:in `<main>'
のように例外が発生します。
メッセージ上のハイパーリンク先としてこういったURIが指定されていると、mikutterごとクラッシュします。
diva gemのlib/diva/uri.rbのgenerate_uri_by_stringメソッドではURI::InvalidComponentErrorのみをrescueしていますが、ここで発生しているのはURI::InvalidURIErrorです。
下記のように共通のスーパークラスであるURI::Errorでrescueするようにすると、例外を発生させず、正しく処理できるようです。
>>> class Diva::URI
def generate_uri_by_string
URI.parse(@uri_string)
rescue URI::Error
Addressable::URI.parse(@uri_string)
end
end
uri = 'https://こっち.みんな/ておくれ'
Diva::URI.new(uri).host
"こっち.みんな"
再現手順
・mastodonで非ASCII文字を含むURIをtootする(例: https://mstdn.kanagu.info/@cobodo/99929919005373666 )
・worldonプラグインを使ってmikutter上で表示し、ハイパーリンクをクリックする。
操作