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/