Project

General

Profile

Bug #5451

cgi/core.rbのread_multipart()で$stdioを直接使っているために、ruby-fcgiでmultipart/form-dataが使えない

Added by kazuhiko (Kazuhiko Shiozaki) almost 9 years ago. Updated almost 9 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 1.9.3dev (2011-09-23 revision 33323) [x86_64-linux]
Backport:
[ruby-dev:44601]

Description

ruby-fcgiを使うと、multipart/form-dataの時にPOSTできないことに気づきました。
調べたところ、ruby-fcgiでは、CGI#stdinputを@request.inに上書きしているのに、cgi/core.rbのread_multipart()でだけ$stdinを直接使っているために、以下のように例外が発生します。 ( https://github.com/tdiary/tdiary-core/issues/102 )

/usr/local/ruby-1.9/lib/ruby/1.9.1/cgi/core.rb:468:in read': Invalid argument - <STDIN> (Errno::EINVAL)
\tfrom /usr/local/ruby-1.9/lib/ruby/1.9.1/cgi/core.rb:468:in
read_multipart'
\tfrom /usr/local/ruby-1.9/lib/ruby/1.9.1/cgi/core.rb:630:in initialize_query'
\tfrom /usr/local/ruby-1.9/lib/ruby/1.9.1/cgi/core.rb:806:in
initialize'
\tfrom :18:in initialize'
\tfrom /home/tdiary/tdiary/tdiary-core/misc/lib/fcgi_patch.rb:74:in
new'

レポジトリをさかのぼると、 r19663 で、それまでのstdinput()を使っていたコードから$stdinを直接使うようになったようですが、何か強い理由があるのでなければ、cgi/core.rbの他のコードと同様に、ここでもstdinputを使ってもらえないでしょうか。

上述の問題は、その修正だけで解決することを確認しています。
また、1.9.3RC1で確認していますが、cgi/core.rbはtrunkのものと全く同一です。

かずひこ

Also available in: Atom PDF