[前][次][番号順一覧][スレッド一覧]

ruby-changes:17685

From: nobu <ko1@a...>
Date: Fri, 5 Nov 2010 00:39:17 +0900 (JST)
Subject: [ruby-changes:17685] Ruby:r29694 (trunk): * io.c (rb_io_readlines, rb_io_each_line): limit must not be zero.

nobu	2010-11-05 00:39:07 +0900 (Fri, 05 Nov 2010)

  New Revision: 29694

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29694

  Log:
    * io.c (rb_io_readlines, rb_io_each_line): limit must not be zero.
      a patch from Tomoyuki Chikanaga at [ruby-dev:42538].  #4024

  Modified files:
    trunk/ChangeLog
    trunk/io.c
    trunk/test/ruby/test_io.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29693)
+++ ChangeLog	(revision 29694)
@@ -1,3 +1,8 @@
+Fri Nov  5 00:39:00 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* io.c (rb_io_readlines, rb_io_each_line): limit must not be zero.
+	  a patch from Tomoyuki Chikanaga at [ruby-dev:42538].  #4024
+
 Fri Nov  5 00:14:15 2010  Aaron Patterson <aaron@t...>
 
 	* ext/fiddle/extconf.rb: fixing ffi library location on windows.
Index: io.c
===================================================================
--- io.c	(revision 29693)
+++ io.c	(revision 29694)
@@ -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 29693)
+++ test/ruby/test_io.rb	(revision 29694)
@@ -1702,4 +1702,24 @@
       GC.start
     end
   end
+
+  def test_readlines_limit_0
+    bug4024 = '[ruby-dev:42538]'
+    t = make_tempfile
+    open(t.path, "r") do |io|
+      assert_raise(ArgumentError, bug4024) do
+        io.readlines(0)
+      end
+    end
+  end
+
+  def test_each_line_limit_0
+    bug4024 = '[ruby-dev:42538]'
+    t = make_tempfile
+    open(t.path, "r") do |io|
+      assert_raise(ArgumentError, bug4024) do
+        io.each_line(0).next
+      end
+    end
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]