プロジェクト

全般

プロフィール

バグ #659

完了

File.openでバイナリファイルをオープンする時、バイナリモードになっていない

Satoshi Okuno さんがほぼ10年前に追加. ほぼ10年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
ブランチ:
クラッシュする:

説明

Windowsに於いて、アカウント認証後にmikutterを再度起動すると、下記の例外でmikutterが起動しなくなります。

C:/Users/desktop/Documents/mikutter/core/service_keeper.rb:122:in `final': wrong
final block length (OpenSSL::Cipher::CipherError)
from C:/Users/desktop/Documents/mikutter/core/service_keeper.rb:122:in `decrypt'
from C:/Users/desktop/Documents/mikutter/core/service_keeper.rb:26:in `block (2 levels) in accounts'
from C:/Users/desktop/Documents/mikutter/core/service_keeper.rb:25:in `open'
from C:/Users/desktop/Documents/mikutter/core/service_keeper.rb:25:in `block in accounts'
from C:/Ruby200/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
from C:/Users/desktop/Documents/mikutter/core/service_keeper.rb:23:in `accounts'
from C:/Users/desktop/Documents/mikutter/core/service.rb:22:in `services_refresh'
from C:/Users/desktop/Documents/mikutter/core/service.rb:324:in `<class:Service>'
from C:/Users/desktop/Documents/mikutter/core/service.rb:11:in `<top (required)>'
from C:/Users/desktop/Documents/mikutter/core/miquire.rb:98:in `require'

from C:/Users/desktop/Documents/mikutter/core/miquire.rb:98:in `miquire_original_require'
from C:/Users/desktop/Documents/mikutter/core/miquire.rb:95:in `file_or_directory_require'
from C:/Users/desktop/Documents/mikutter/core/miquire.rb:76:in `block in miquire'
from C:/Users/desktop/Documents/mikutter/core/miquire.rb:75:in `each'
from C:/Users/desktop/Documents/mikutter/core/miquire.rb:75:in `miquire'
from C:/Users/desktop/Documents/mikutter/core/miquire.rb:18:in `miquire'
from mikutter.rb:36:in `&lt;main&gt;'

今話題のOpenSSL関係かと思いましたが、ファイルのオープンモードの問題でした。

servie_keeper.rbの25行目と109行目のFile.openのモードがデフォルト(テキストモード)になっており、Windows環境では読み書き時に改行コードが変換(LF<->CRLF)されてキーが復元不能に成ってる模様です。

へんてこ環境特有の問題で恐縮ですが、バイナリモード指定("rb"、"wb")として頂けないでしょうか。

また、utils.rbの下記メソッドも同様の問題を抱えているため、併せて検討頂ければ。
object_get_contents()
file_put_contents()(※)
file_get_contents()(※)

※ 現状テキスト(YAMLとか)とバイナリ(画像ファイルとか)の両方で使用していますが、mikutterが扱うテキストファイルは全てLFなので、バイナリモード決め打ちで良いかなと思っています。


ファイル

0001-Windows.patch (2.55 KB) 0001-Windows.patch Satoshi Okuno, 2014-05-04 23:34

toshi_a 初音 さんがほぼ10年前に更新

  • ステータス新規 から 実装待ち に変更
  • 担当者Satoshi Okuno にセット

この件、こちらでは検証できる環境がないので、パッチをいただけますか?

Satoshi Okuno さんがほぼ10年前に更新

了解です。パッチを添付します。
WindowsとMacで動作する事を確認してます。
ご確認ください。

Satoshi Okuno さんがほぼ10年前に更新

  • ステータス実装待ち から パッチ適用待ち に変更
  • 担当者Satoshi Okuno から toshi_a 初音 に変更

toshi_a 初音 さんがほぼ10年前に更新

  • トラッカー環境対応 から バグ に変更
  • 題名Windowsでアカウント認証後起動出来なく成る から File.openでバイナリファイルをオープンする時、バイナリモードになっていない に変更

toshi_a 初音 さんがほぼ10年前に更新

  • ステータスパッチ適用待ち から レビュー待ち に変更
  • 担当者toshi_a 初音 から Satoshi Okuno に変更

バイナリファイルを、改行コードを変更するような指定をして読み込むのはおかしいと思ったので、取り込みました。
タイトル、バイナリモードと書いてしまいましたが、たんに改行コードを変更しないということのようですね

http://docs.ruby-lang.org/ja/2.1.0/method/Kernel/m/open.html

頂いたパッチから若干変更しましたが、これで大丈夫でしょうか。

Satoshi Okuno さんがほぼ10年前に更新

  • ステータスレビュー待ち から 解決 に変更

お疲れさまです。
Windows7で改善されている事を確認しました。

C言語のノリでバイナリモードと呼称してましたが、確かにRubyだと改行コードを考慮しないモードですね。

toshi_a 初音 さんがほぼ10年前に更新

  • ステータス解決 から 終了 に変更

他の形式にエクスポート: Atom PDF