[milter-manager-users-ja] 00 のバイトデータ(null文字)以降のメールデータが壊れる問題

アーカイブの一覧に戻る

Kenji Okimoto okimo****@clear*****
2018年 6月 28日 (木) 12:53:18 JST


沖元です。

詳しい再現手順をありがとうございます。

手元でもPostfixといただいたデータを使って同様の現象を確認しました。

> この問題を回避して、「00」のバイトデータを含め、それ以降のデータも正しく
> Ruby 側で受け取る方法があればご教示頂けないでしょうか?

結論から言うと、回避策のようなものはありません。

milterのCで実装されている箇所で、bodyのコールバックにMTAからやってきた
チャンクを渡すときに、チャンクにNULLが含まれているとチャンクがNULL終端
されていることになってしまうようです。このとき、チャンクのサイズはNULL
を含んだ元のデータのサイズとなっているので、Rubyで実装したコールバック
がチャンクを処理する際に受け取るチャンクの内容とチャンクの長さが一致し
ないため、壊れたデータが表示されるようです。

NULL文字を含んだチャンクを扱えるように修正する必要があると思います。

以降の調査は、以下のissueで進めようと思います。
https://github.com/milter-manager/milter-manager/issues/135


-- 
Kenji Okimoto <okimo****@clear*****>




milter-manager-users-ja メーリングリストの案内
アーカイブの一覧に戻る