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*****>