[#42564] [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — Makoto Kishimoto <redmine@...>

Feature #4043: グローバル関数current_classの提案

15 messages 2010/11/11
[#42774] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — Yukihiro Matsumoto <matz@...> 2010/12/16

まつもと ゆきひろです

[#42834] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp> 2010/12/21

きしもとです

[#42835] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — Yukihiro Matsumoto <matz@...> 2010/12/21

まつもと ゆきひろです

[#42838] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp> 2010/12/21

きしもとです

[#42845] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — Yukihiro Matsumoto <matz@...> 2010/12/21

まつもと ゆきひろです

[#42577] Rubyのバグレポートのガイドライン — "Shota Fukumori (sora_h)" <sorah@...>

sora_hです。

11 messages 2010/11/15
[#42588] Re: Rubyのバグレポートのガイドライン — Yugui <yugui@...> 2010/11/18

2010/11/15 Shota Fukumori (sora_h) <sorah@tubusu.net>:

[#42638] Enumerable#categorize — Tanaka Akira <akr@...>

enumerable から hash を生成するメソッドとして

25 messages 2010/11/27
[#42643] Re: Enumerable#categorize — Yukihiro Matsumoto <matz@...> 2010/11/27

まつもと ゆきひろです

[ruby-dev:42538] [Ruby 1.9-Bug#4024][Open] IO#readlines(0) never return

From: Tomoyuki Chikanaga <redmine@...>
Date: 2010-11-04 14:11:27 UTC
List: ruby-dev #42538
Bug #4024: IO#readlines(0) never return
http://redmine.ruby-lang.org/issues/show/4024

起票者: Tomoyuki Chikanaga
ステータス: Open, 優先度: Normal
カテゴリ: core
ruby -v: ruby 1.9.3dev (2010-11-04 trunk 29690) [x86_64-darwin10.4.0]

1.9.2 および trunk で IO#readlines の引数に 0 を渡すと無限ループ状態になり処理がかえってこなくなります。
IO#each_line も同様に "" を yield し続けます。
(via http://twitter.com/#!/watson1978/status/29656929210)

readlines/each_line で limit に 0 が渡された時は例外にするのが良いのではないでしょうか。
パッチを添付します。


----------------------------------------
http://redmine.ruby-lang.org

Attachments (1)

io_readlines.patch (1.35 KB, text/x-diff)
Index: io.c
===================================================================
--- io.c	(revision 29690)
+++ io.c	(working copy)
@@ -2724,6 +2724,8 @@
     long limit;
 
     prepare_getline_args(argc, argv, &rs, &limit, io);
+    if (limit == 0) 
+	rb_raise(rb_eArgError, "invalid limit: 0 for readlines");
     ary = rb_ary_new();
     while (!NIL_P(line = rb_io_getline_1(rs, limit, io))) {
 	rb_ary_push(ary, line);
@@ -2773,6 +2775,8 @@
 
     RETURN_ENUMERATOR(io, argc, argv);
     prepare_getline_args(argc, argv, &rs, &limit, io);
+    if (limit == 0) 
+	rb_raise(rb_eArgError, "invalid limit: 0 for each_line");
     while (!NIL_P(str = rb_io_getline_1(rs, limit, io))) {
 	rb_yield(str);
     }
Index: test/ruby/test_io.rb
===================================================================
--- test/ruby/test_io.rb	(revision 29690)
+++ test/ruby/test_io.rb	(working copy)
@@ -1702,4 +1702,24 @@
       GC.start
     end
   end
+
+  def test_readlines_limit_0
+    bugxxx = "[ruby-dev:xxx]"
+    t = make_tempfile
+    assert_raise(ArgumentError, bugxxx) do
+      open(t.path, "r") do |io|
+        io.readlines(0)
+      end
+    end
+  end
+
+  def test_each_line_limit_0
+    bugxxx = "[ruby-dev:xxx]"
+    t = make_tempfile
+    assert_raise(ArgumentError, bugxxx) do
+      open(t.path, "r") do |io|
+        io.each_line(0).next
+      end
+    end
+  end
 end

In This Thread

Prev Next