Article delegate-ja/597 of [1-661] on the server localhost:119
  upper oldest olders older1 this newer1 newers latest
search
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
[Reference:<_A595@delegate-ja.ML_>]
Newsgroups: mail-lists.delegate-ja

[DeleGate-Ja] Re: [DeleGate-Ja] DeleGateに関するご質問
03 Jun 2014 08:32:27 GMT ysato@delegate.org (Yutaka Sato)
The DeleGate Project


In message <CAC3rWRV07qzHsaz4UptXUu=yFPpU4vw-TnWr8mhvmbPtgPGbdA@mail.gmail.com> on 06/02/14(23:27:12)
I wrote:
 |> 現在、DeleGateをPOP3のプロキシとして利用させていただいており、
 |> 外部フィルタを利用する際にCFIのFTOCLを使用しておりますが
 |> この場合にメールヘッダーのサイズが64KB以上にメールにおいて
 |> フィルタ処理が失敗する事象が出ている状況なのですが
 |> FTOCL等のCFIを利用する際に処理可能なヘッダーサイズの上限値(64KB)等は
 |> DeleGateの仕様面で存在するのでしょうか?
 |
 |あるようです。実装面ですが。filter/cfi.c の中に
 |
 |  /*
 |   * read RFC822 header without buffering.
 |   */
 |  static char *readHeader(FILE *in){
 |        int pch,ch;
 |        CStr(buf,0x10000);
 |       ...

調べてみますと、この関数は Windows 上だけで使われています。Unix では、
mimekit/rfc822.c の中のRFC822_readHeader というのが使われています。
上記コード中のコメント、"without buffering" というのは、ヘッダ部の
読み込みの際にバッファリングを止めないと、Windows上では、ボディ部の
読み込みに問題が生じるからだったように記憶しています。

さて、RFC822_readHeader でもバッファのサイズは 0x10000 なので、大き
なヘッダに対処できないという点では同様です。ただ、より深刻に思われ
ましたのは、readHeader のほうでは読み込みに getc() を使用しているのに
対して、RFC822_readHeader のほうでは、読み込みに fgets() を使用して
いることです。この fgets() では読み込みのサイズを、読み込み済みの
データに対応して縮小して行きますが、残りサイズがゼロに達した時に
fgets() が暴走するのではないかと言う事です。と、ときっとしました --;
が、fgets() をする前にバッファに残りがあるかどうか調べていて、
残りが無くなったら "too large header" というログを残して脱出する
ようになっていました。やれやれ。

このチェックが導入されたのは、バッファオーバフローの一掃作業を
やっていた 8.10.3 ですので、それ以前の版(10年以上前の版)には問題が
存在します。まあ、もし使い続けられているとしたら、at your own risk
ってやつですね。

 |> またこの値は設定によって変更が可能なのでしょうか?
 |
 |上記のようにハードコーディングされていますので、不可能です。

RF822_readHeader 以外にも64Kの決めうちのバッファが rfc822.c に
多数あるので、これらも対処させないといけないかも知れません。

 |> 突然の質問で誠に恐縮ですがアドバイスをいただけると幸いです。
 |
 |次のリリースではちょっと大きくしときましょうかね。256Kとか:p

DeleGate ではほとんどの処理をスタック上の固定長バッファで済ませる
流儀だと思うのですが、この件につきましては結果を malloc() して
返していることでもあり、どうしようかと迷うところであります。
それにしても grep 'Str.*,0x10000' */*.c などとすると、このサイズ
のバッファの多いこと。。。

  9 9   ┌─┐┬┌──┬┐ //\^^ {Do the more with the less -- B. Fuller}
 ( e )  ├─┤│└─┐│ / 877m\<URL:http://www.delegate.org/delegate/>
_<   >_ ┴ └┴──┘┴──────────────────────────────
佐藤豊@ITRI.産総研

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
@_@V