バグ #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なので、バイナリモード決め打ちで良いかなと思っています。
ファイル