Vimとセキュキャンの応募用紙、それとVimの話 #seccamp

2014/6/17
Original: http://blog.osyoyu.com/2014/06/applied-for-security-camp-2014/

セキュリティ・キャンプ2014 Webセキュリティクラスに応募したことと Vim の話です。
応募したことと Vim の話なので、応募用紙の内容の話ではないです。

さて、自分は応募用紙を全世界で愛されているエディタであるところのVimで書いたのですが、Vimがなにやら色々と妙な挙動を示しました。
応募用紙 (テキスト版) を開いて、とりあえず 5. を見たところ、ちょっと違和感のある部分がありました。


if( !url.match( /^https?:¥/¥// ) ) return "/";
                         ^ ^ こいつら

日本語版 Windows じゃないのにバックスラッシュ(0x5C)が円記号(0xA5)になってる!! なんだこれは!!
hexdump で見るとこの位置には 0x5C があるので、謎はますます深まるばかりです。未だに解決してません。

vim -u NONE でこのファイルを開いたら、A5 にはならなかった (し、文字化けした) ので、どうも文字コードのまわりの処理がクサそうです。
検証のため、日本語版 Windows 7 の notepad.exe でバックスラッシュ(見た目円記号)が含まれるファイルを作成して、Linux上のVimに持ってきましたが、0xA5にはなりませんでした。誰か教えてください。

それともう一点。Vim でこの応募用紙を開いた時、UTF-8 なファイルだと認識したようでした。自分はそれを露ほども疑わずに最初から最後までVimで書き通し、確認もVimでしたのですが、提出後に添付したファイルを念のためGmailからダウンロードし、gedit で開いたところ文字化け!! そこに、ちょうどこんな感じのツイートが目に入り、大慌てです。

ウヒョー。もう提出期限は過ぎてしまっていたのですが、念のため事務局の方に連絡したところ、向こうでは正しく開けていたようです。

nkf -g したところ、Shift_JIS と guess されましたし、hexdump で覗いても中身は Shift_JIS でした。どうして Vim は UTF-8 だと思っているファイルに Shift_JIS で書き込んだのでしょうか。これも誰か教えてください……。

おしまい。通っていますように。