ruby-changes:7156
From: akr <ko1@a...>
Date: Sun, 17 Aug 2008 21:54:43 +0900 (JST)
Subject: [ruby-changes:7156] Ruby:r18675 (trunk): * io.c (prepare_getline_args): io.gets(10,nil) should cause TypeError.
akr 2008-08-17 21:54:26 +0900 (Sun, 17 Aug 2008) New Revision: 18675 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18675 Log: * io.c (prepare_getline_args): io.gets(10,nil) should cause TypeError. Modified files: trunk/ChangeLog trunk/io.c trunk/test/ruby/test_io.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 18674) +++ ChangeLog (revision 18675) @@ -1,3 +1,7 @@ +Sun Aug 17 21:50:22 2008 Tanaka Akira <akr@f...> + + * io.c (prepare_getline_args): io.gets(10,nil) should cause TypeError. + Sun Aug 17 15:58:39 2008 Nobuyoshi Nakada <nobu@r...> * lib/mkmf.rb: not check config.h. Index: io.c =================================================================== --- io.c (revision 18674) +++ io.c (revision 18675) @@ -1889,30 +1889,24 @@ static void prepare_getline_args(int argc, VALUE *argv, VALUE *rsp, long *limit, VALUE io) { - VALUE lim, rs; + VALUE rs = rb_rs, lim = Qnil; rb_io_t *fptr; - if (argc == 0) { - rs = rb_rs; - lim = Qnil; - } - else { - rb_scan_args(argc, argv, "11", &rs, &lim); - if (!NIL_P(lim)) { - StringValue(rs); - } - else if (!NIL_P(rs) && TYPE(rs) != T_STRING) { - VALUE tmp = rb_check_string_type(rs); + if (argc == 1) { + VALUE tmp = Qnil; - if (NIL_P(tmp)) { - lim = rs; - rs = rb_rs; - } - else { - rs = tmp; - } - } + if (NIL_P(argv[0]) || !NIL_P(tmp = rb_check_string_type(argv[0]))) { + rs = tmp; + } + else { + lim = argv[0]; + } } + else if (2 <= argc) { + rb_scan_args(argc, argv, "2", &rs, &lim); + if (!NIL_P(rs)) + StringValue(rs); + } if (!NIL_P(rs)) { rb_encoding *enc_rs, *enc_io; Index: test/ruby/test_io.rb =================================================================== --- test/ruby/test_io.rb (revision 18674) +++ test/ruby/test_io.rb (revision 18675) @@ -44,6 +44,15 @@ r.close end + def test_gets_limit_extra_arg + with_pipe {|r, w| + r, w = IO.pipe + w << "0123456789" + w.close + assert_raise(TypeError) { r.gets(3,nil) } + } + end + # This test cause SEGV. def test_ungetc r, w = IO.pipe -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/