kconv.rbとMIMEのデコード

正確にどのバージョンからかは知らないけど、RubynkfUTF-8 をサポートしてくれるようになったので、影舞の中から Iconv にかかわるコードを消す作業をしたのが2日前のこと。

そのとき影舞のコードの中に kconv.rb という nkf のラッピングをしているコードを見つけてしまって、nkf のラッパーは Ruby 標準の kconv.rb があるわけで、何この無駄なコード?と思ってざっくり削除してコミットしておいたんだけど。

今日、仕事で影舞を含んだシステムをいじっているときに、Kagemai::Kconv のコメントに「MIMEデコードを勝手に行わない kconv 互換ラッパ」というコメントがあるのを発見してしまった。

そうだよ。MIME デコードを勝手にされるとメール回りでいろいろ困るので、nkf を直接叩くようにしたんだった。

ruby についてくる kconv.rb の場合、

  $ ruby -rkconv -e 'puts "=?ISO-2022-JP?B?GyRCJUYlOSVIGyhC?=".toeuc'
   テスト

となる。これを避けるためには、nkf を -m0 オプションつきで直接呼べば大丈夫。

勝手にデコードされるとどう困るかと言うと、たとえばメールによるバグ投稿をするケースで困る。メール本文は普通 iso-2022-jp だから影舞の場合は EUC に変換するわけだけど、MIMEを勝手にデコードされると、MIMEエンコードされた文字列を扱う議論が出来なくなってしまう。なんか当たりまえだけど、すっかり忘れてた。

ところでユニットテストがあるから3年前のコードでも平気でいじれるとか書いたのは誰だ?フォローできてないじゃないか。