Bug #5451

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

Added by Kazuhiko Shiozaki over 2 years ago. Updated over 2 years ago.

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

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のものと全く同一です。

かずひこ

Associated revisions

Revision 33472
Added by Takeyuki FUJIOKA over 2 years ago

Tue Oct 18 02:24:19 2011 Takeyuki FUJIOKA xibbar@ruby-lang.org

  • lib/cgi/core.rb (QueryExtension#read_multiparat): replace 'stdinput' from '$stdin' because using fast cgi. [Bug #5451]

History

#1 Updated by Takeyuki FUJIOKA over 2 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r33472.
Kazuhiko, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


Tue Oct 18 02:24:19 2011 Takeyuki FUJIOKA xibbar@ruby-lang.org

  • lib/cgi/core.rb (QueryExtension#read_multiparat): replace 'stdinput' from '$stdin' because using fast cgi. [Bug #5451]

Also available in: Atom PDF