ある条件とは、不正な形式のメールヘッダで、且つ``@''とESC(0x1b)が含まれている、というものです。
ある条件について
bouncehammer 2.7.5以前のバージョンのmailboxparserに下記のようなヘッダを含むバウンスメールを解析させると、``Invalid mailbox list: ...''というエラーメッセージとともにコマンドが異常終了します。To: 麻生太郎
単にメールアドレスがないだけのTo:ヘッダに見えますが、これは本来下記のように書かれているべきです。
To: =?ISO-2022-JP?B?GyRCS2NAOEJATzobKEI=?= <asotaro@example.jp>
適切にMIMEエンコードされていない生のISO-2022-JPの文字列は7ビットに収まるのですが、含まれている文字によっては面倒なことになります。生のISO-2022-JP文字列を表示すると次のようになります。
% cat 1.eml | od -ax⏎
0000000 T o : sp esc $ B K c @ 8 B @ O : esc
546f 3a20 1b24 424b 6340 3842 404f 3a1b
0000020 ( B nl
2842 0a00
0000023
メールアドレスを取り出すモジュールKanadzuchi::Addressのparse()メソッド内部での検査が甘かったので、@(0x40)が含まれている=メールアドレスっぽい→Email::AddressParser->parse()に渡す→``Invalid mailbox list:...''というエラーで落ちていました。Shift_JISやEUC,UTF-8を生で書いているケースでも文字によっては同じエラーが出るかもしれません(未検証)
修正内容
実際は、ESC(0x1b)が含まれている場合に限り、Email::AddressParser->parse()がエラーを吐いて落ちていたのですが、それ以前の検査が甘かったので、表示できない文字(0x20〜0x7E以外)が含まれていたら有効なメールアドレスではないというコードを追加しました。よほど適当に作られたメール送信プログラムでも無い限り、ヘッダの7ビットに収まらない文字はちゃ〜んとMIMEエンコードされているはずですが、たまにこういうメールに出くわします。
``Invalid mailbox list:...''というエラーメッセージを見たら、多くの場合はメールアドレス処理のバグなので、もし他のケースで見つけた方がいらっしゃったら教えてください。
0 件のコメント:
コメントを投稿