Project

General

Profile

バグ #659

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

Added by Satoshi Okuno over 5 years ago. Updated over 5 years ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
ブランチ:
クラッシュする:

Description

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


Files

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

Associated revisions

Revision 1d07c878 (diff)
Added by Satoshi Okuno over 5 years ago

バイナリファイルを開くときにバイナリモードで開く様にした refs #659

History

#1

Updated by toshi_a 初音 over 5 years ago

  • Status changed from 新規 to 実装待ち
  • Assignee set to Satoshi Okuno

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

#2

Updated by Satoshi Okuno over 5 years ago

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

#3

Updated by Satoshi Okuno over 5 years ago

  • Status changed from 実装待ち to パッチ適用待ち
  • Assignee changed from Satoshi Okuno to toshi_a 初音
#4

Updated by toshi_a 初音 over 5 years ago

  • Tracker changed from 環境対応 to バグ
  • Subject changed from Windowsでアカウント認証後起動出来なく成る to File.openでバイナリファイルをオープンする時、バイナリモードになっていない
#5

Updated by toshi_a 初音 over 5 years ago

  • Status changed from パッチ適用待ち to レビュー待ち
  • Assignee changed from toshi_a 初音 to Satoshi Okuno

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

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

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

#6

Updated by Satoshi Okuno over 5 years ago

  • Status changed from レビュー待ち to 解決

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

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

#7

Updated by toshi_a 初音 over 5 years ago

  • Status changed from 解決 to 終了

Also available in: Atom PDF