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

ruby-changes:18444

From: nobu <ko1@a...>
Date: Thu, 6 Jan 2011 05:14:53 +0900 (JST)
Subject: [ruby-changes:18444] Ruby:r30467 (trunk): * ext/stringio/stringio.c (get_strio, strio_set_string)

nobu	2011-01-06 05:14:43 +0900 (Thu, 06 Jan 2011)

  New Revision: 30467

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

  Log:
    * ext/stringio/stringio.c (get_strio, strio_set_string)
      (strio_reopen): check if frozen.  [ruby-core:33648]

  Modified files:
    trunk/ChangeLog
    trunk/ext/stringio/stringio.c
    trunk/test/stringio/test_stringio.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30466)
+++ ChangeLog	(revision 30467)
@@ -1,3 +1,8 @@
+Thu Jan  6 05:14:41 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/stringio/stringio.c (get_strio, strio_set_string)
+	  (strio_reopen): check if frozen.  [ruby-core:33648]
+
 Thu Jan  6 05:10:58 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* array.c (rb_ary_resize): new utility function.  [ruby-dev:42912]
Index: ext/stringio/stringio.c
===================================================================
--- ext/stringio/stringio.c	(revision 30466)
+++ ext/stringio/stringio.c	(revision 30467)
@@ -85,7 +85,7 @@
 static struct StringIO*
 get_strio(VALUE self)
 {
-    struct StringIO *ptr = check_strio(self);
+    struct StringIO *ptr = check_strio(rb_io_taint_check(self));
 
     if (!ptr) {
 	rb_raise(rb_eIOError, "uninitialized stream");
@@ -312,7 +312,7 @@
 {
     struct StringIO *ptr = StringIO(self);
 
-    if (!OBJ_TAINTED(self)) rb_secure(4);
+    rb_io_taint_check(self);
     ptr->flags &= ~FMODE_READWRITE;
     StringValue(string);
     ptr->flags = OBJ_FROZEN(string) ? FMODE_READABLE : FMODE_READWRITE;
@@ -504,7 +504,7 @@
 static VALUE
 strio_reopen(int argc, VALUE *argv, VALUE self)
 {
-    if (!OBJ_TAINTED(self)) rb_secure(4);
+    rb_io_taint_check(self);
     if (argc == 1 && TYPE(*argv) != T_STRING) {
 	return strio_copy(self, *argv);
     }
Index: test/stringio/test_stringio.rb
===================================================================
--- test/stringio/test_stringio.rb	(revision 30466)
+++ test/stringio/test_stringio.rb	(revision 30467)
@@ -471,4 +471,13 @@
       expected_pos += 1
     end
   end
+
+  def test_frozen
+    s = StringIO.new
+    s.freeze
+    bug = '[ruby-core:33648]'
+    assert_raise(RuntimeError, bug) {s.puts("foo")}
+    assert_raise(RuntimeError, bug) {s.string = "foo"}
+    assert_raise(RuntimeError, bug) {s.reopen("")}
+  end
 end

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

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