Vimとセキュキャンの応募用紙、それとVimの話 #seccamp
セキュリティ・キャンプ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 で開いたところ文字化け!! そこに、ちょうどこんな感じのツイートが目に入り、大慌てです。
セキュリティキャンプの応募用紙、毎年数名、暗号化してたりエンコードしてたり難読化してたりと凝った体裁で送ってくる人がいますけれど、よっぽどヒマでない限りはそういうのは読み飛ばしちゃうので、ふつうに平文で書いてくださいね。
— Yosuke HASEGAWA (@hasegawayosuke) June 16, 2014
ウヒョー。もう提出期限は過ぎてしまっていたのですが、念のため事務局の方に連絡したところ、向こうでは正しく開けていたようです。
nkf -g したところ、Shift_JIS と guess されましたし、hexdump で覗いても中身は Shift_JIS でした。どうして Vim は UTF-8 だと思っているファイルに Shift_JIS で書き込んだのでしょうか。これも誰か教えてください……。
おしまい。通っていますように。