From: Wakou Aoyama Date: 2001-12-13T08:00:25+09:00 Subject: [ruby-dev:15429] Re: cgi.rb CGI#read_multipart 青山です。 On Wed, Dec 12, 2001 at 12:37:00PM +0900, TAKEMURA Masahiro wrote: > 普通はそんなことはないはずなのですが、ある環境でCGIに渡されるMultipartデータ > が破壊されており、その結果として CGI#read_multipart で無限ループになって > しまうということがありました。 > > こういった場合に例外を起こしてくれると原因追求に役立つと思うので、 > 以下のようにしてはどうでしょうか。1.6.5付属のcgi.rbへのパッチです。 > > ただし、発生する例外がIOErrorでいいのかはよくわかっていません。 なるほど。これまでも報告はありませんでしたし、私も、そんな事はないはず、 という考えがあったようで、ここでの raise は、まあ、可能性はあるか、と いう程度で、あまり考慮せずに書いたものでした。 しかし、実際に Error をとらえようとすると、利用時にはあまり便利そうで はありませんね。 begin cgi = CGI.new rescue EOFError ... rescue IOError ... end この場合に限れば、いっそ、ライブラリ内で exit してしまうというのも手で しょうか。 --- cgi.rb.org Thu Dec 13 06:27:25 2001 +++ cgi.rb Thu Dec 13 07:41:41 2001 @@ -790,8 +790,9 @@ boundary_size = boundary.size + EOL.size content_length -= boundary_size status = stdinput.read(boundary_size) - if nil == status - raise EOFError, "no content body" + if boundary + EOL != status + self.out("status" => "400 Bad Request (malformed multipart POST)"){""} + exit end require "tempfile" -- 青山 和光 Wakou Aoyama