バグ #659
完了File.openでバイナリファイルをオープンする時、バイナリモードになっていない
説明
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 `<main>'
今話題の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なので、バイナリモード決め打ちで良いかなと思っています。
ファイル
toshi_a 初音 さんが10年以上前に更新
- ステータス を 新規 から 実装待ち に変更
- 担当者 を Satoshi Okuno にセット
この件、こちらでは検証できる環境がないので、パッチをいただけますか?
Satoshi Okuno さんが10年以上前に更新
- ファイル 0001-Windows.patch 0001-Windows.patch を追加
了解です。パッチを添付します。
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だと改行コードを考慮しないモードですね。