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/