Issue #5952 has been reported by Hiroshi SHIBATA.
Bug #5952: コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する
Author: Hiroshi SHIBATA
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3p28 (2012-01-28 revision 34386) [x86_64-darwin11.2.0]
=begin
1.9.3p28, trunk で以下のスクリプトを実行すると2回目の CGI.new で パラメータを受け取る時に IOError
が発生します。
% cat cli.rb
require ‘cgi’
CGI.new
CGI.new
% ruby cli.rb
(offline mode: enter name=value pairs on standard input)
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
tty?': closed stream (IOError) from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
read_from_cmdline’
from
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:645:in
initialize_query' from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:806:in
initialize’
from cli.rb:4:in new' from cli.rb:4:in
’
1.9.2p290 や 1.8.7p357 ではエラーなく2回パラメータを入力可能です。
=end
Issue #5952 has been updated by Tomoyuki C…
Category set to core
r29781 以降 Kernel#readlines (ARGF.readlines) で EOF を検出すると stdin を close
するようになっていたようです。以下のようなサンプルで現象を確認できます。
readlines.rb:
p STDIN.closed? # => false
p readlines # => [] ← Ctrl-D で EOF を送出
p STDIN.closed? # => true
p readlines # => [] ← すぐにかえってくる
1.9.2 では最後の STDIN.closed? は false のままで、2度目の readlines は入力を待ちます。
ARGF.current_file が標準入力だったら close しないようにするととりあえずこの現象は直りました。これでどうでしょう。
diff --git a/io.c b/io.c
index a3a45c0…e877f13 100644
— a/io.c
+++ b/io.c
@@ -7684,7 +7684,8 @@ argf_readlines(int argc, VALUE *argv, VALUE argf)
}
else {
lines = rb_io_readlines(argc, argv, ARGF.current_file);
-
if ( ARGF.current_file != rb_stdin )
-
argf_close(ARGF.current_file);
}
ARGF.next_p = 1;
rb_ary_concat(ary, lines);
Bug #5952: コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する
Author: Hiroshi SHIBATA
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3p28 (2012-01-28 revision 34386) [x86_64-darwin11.2.0]
=begin
1.9.3p28, trunk で以下のスクリプトを実行すると2回目の CGI.new で パラメータを受け取る時に IOError
が発生します。
% cat cli.rb
require ‘cgi’
CGI.new
CGI.new
% ruby cli.rb
(offline mode: enter name=value pairs on standard input)
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
tty?': closed stream (IOError) from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
read_from_cmdline’
from
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:645:in
initialize_query' from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:806:in
initialize’
from cli.rb:4:in new' from cli.rb:4:in
’
1.9.2p290 や 1.8.7p357 ではエラーなく2回パラメータを入力可能です。
=end
2012$BG/(B1$B7n(B31$BF|(B9:34 Tomoyuki C.
[email protected]:
p STDIN.closed? # => true
p readlines # => [] ← $B$9$0$K$+$($C$F$/$k(B
1.9.2 $B$G$O:G8e$N(B STDIN.closed? $B$O(B false $B$N$^$^$G!"(B2$BEYL$N(B
readlines $B$OF~NO$rBT$A$^$9!#(B
ARGF.current_file $B$,I8=`F~NO$@$C$?$i(B close
$B$7$J$$$h$&$K$9$k$H$H$j$"$($:$3$N8=>]$OD>$j$^$7$?!#$3$l$G$I$&$G$7$g$&!#(B
$B7P0^$r$h$/J,$+$C$F$$$J$$$N$G$9$,!“(Bstdin$B$O(Bclose$B$7$F$O$$$1$J$$$1$I!”(Bpipe$B$O(Bclose$B$7$F$$$$$H$$$&$N$O$J$K$+JQ$J46$8$,$7$^$9!#0l@Z(Bclose$B$7$F$O$$$1$J$$$N$G$O$J$$$G$7$g$&$+(B
Issue #5952 has been updated by Hiroshi SHIBATA.
r34409 で修正されているのを確認しました。ありがとうございます。
Bug #5952: コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する
Author: Hiroshi SHIBATA
Status: Closed
Priority: Normal
Assignee:
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3p28 (2012-01-28 revision 34386) [x86_64-darwin11.2.0]
=begin
1.9.3p28, trunk で以下のスクリプトを実行すると2回目の CGI.new で パラメータを受け取る時に IOError
が発生します。
% cat cli.rb
require ‘cgi’
CGI.new
CGI.new
% ruby cli.rb
(offline mode: enter name=value pairs on standard input)
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
tty?': closed stream (IOError) from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
read_from_cmdline’
from
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:645:in
initialize_query' from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:806:in
initialize’
from cli.rb:4:in new' from cli.rb:4:in
’
1.9.2p290 や 1.8.7p357 ではエラーなく2回パラメータを入力可能です。
=end
Issue #5952 has been updated by Yui NARUSE.
Status changed from Closed to Assigned
Assignee set to Nobuhiro I.
Bug #5952: コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する
Author: Hiroshi SHIBATA
Status: Assigned
Priority: Normal
Assignee: Nobuhiro I.
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3p28 (2012-01-28 revision 34386) [x86_64-darwin11.2.0]
=begin
1.9.3p28, trunk で以下のスクリプトを実行すると2回目の CGI.new で パラメータを受け取る時に IOError
が発生します。
% cat cli.rb
require ‘cgi’
CGI.new
CGI.new
% ruby cli.rb
(offline mode: enter name=value pairs on standard input)
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
tty?': closed stream (IOError) from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
read_from_cmdline’
from
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:645:in
initialize_query' from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:806:in
initialize’
from cli.rb:4:in new' from cli.rb:4:in
’
1.9.2p290 や 1.8.7p357 ではエラーなく2回パラメータを入力可能です。
=end
Issue #5952 has been updated by Yui NARUSE.
Status changed from Assigned to Closed
The test is removed on r34412.
Bug #5952: コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する
Author: Hiroshi SHIBATA
Status: Closed
Priority: Normal
Assignee: Nobuyoshi N.
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3p28 (2012-01-28 revision 34386) [x86_64-darwin11.2.0]
=begin
1.9.3p28, trunk で以下のスクリプトを実行すると2回目の CGI.new で パラメータを受け取る時に IOError
が発生します。
% cat cli.rb
require ‘cgi’
CGI.new
CGI.new
% ruby cli.rb
(offline mode: enter name=value pairs on standard input)
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
tty?': closed stream (IOError) from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
read_from_cmdline’
from
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:645:in
initialize_query' from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:806:in
initialize’
from cli.rb:4:in new' from cli.rb:4:in
’
1.9.2p290 や 1.8.7p357 ではエラーなく2回パラメータを入力可能です。
=end
Issue #5952 has been updated by Yui NARUSE.
Assignee changed from Nobuhiro I. to Nobuyoshi N.
Bug #5952: コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する
Author: Hiroshi SHIBATA
Status: Assigned
Priority: Normal
Assignee: Nobuyoshi N.
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3p28 (2012-01-28 revision 34386) [x86_64-darwin11.2.0]
=begin
1.9.3p28, trunk で以下のスクリプトを実行すると2回目の CGI.new で パラメータを受け取る時に IOError
が発生します。
% cat cli.rb
require ‘cgi’
CGI.new
CGI.new
% ruby cli.rb
(offline mode: enter name=value pairs on standard input)
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
tty?': closed stream (IOError) from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:595:in
read_from_cmdline’
from
/Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:645:in
initialize_query' from /Users/hsbt/.rbenv/versions/2.0.0-dev/lib/ruby/2.0.0/cgi/core.rb:806:in
initialize’
from cli.rb:4:in new' from cli.rb:4:in
’
1.9.2p290 や 1.8.7p357 ではエラーなく2回パラメータを入力可能です。
=end