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

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/

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