diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-05 11:13:18 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-06-05 11:13:18 +0000 |
commit | 2073258a7d192e8d2bc853e10464a7a5fcac8f2d (patch) | |
tree | 9c7290dc3a782104d0b14f2feaffc6131744f4e2 /test/ruby/test_object.rb | |
parent | b1ae6e473e1c1865a1dcd5e4e5d242345c20cc77 (diff) | |
download | ruby-2073258a7d192e8d2bc853e10464a7a5fcac8f2d.tar.gz |
obj_init_copy
* object.c (rb_obj_init_copy): should check if trusted too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_object.rb')
-rw-r--r-- | test/ruby/test_object.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/ruby/test_object.rb b/test/ruby/test_object.rb index d63886a81e..70dcd04201 100644 --- a/test/ruby/test_object.rb +++ b/test/ruby/test_object.rb @@ -764,4 +764,36 @@ class TestObject < Test::Unit::TestCase assert_equal((eval("raise #{code}") rescue $!.inspect), out.chomp, bug5473) end end + + def assert_not_initialize_copy + a = yield + b = yield + assert_nothing_raised("copy") {a.instance_eval {initialize_copy(b)}} + c = a.dup.freeze + assert_raise(RuntimeError, "frozen") {c.instance_eval {initialize_copy(b)}} + d = a.dup.trust + assert_raise(SecurityError, "untrust") do + proc { + $SAFE = 4 + d.instance_eval {initialize_copy(b)} + }.call + end + [a, b, c, d] + end + + def test_bad_initialize_copy + assert_not_initialize_copy {Object.new} + assert_not_initialize_copy {[].to_enum} + assert_not_initialize_copy {Enumerator::Generator.new {}} + assert_not_initialize_copy {Enumerator::Yielder.new {}} + assert_not_initialize_copy {File.stat(__FILE__)} + assert_not_initialize_copy {open(__FILE__)}.each(&:close) + assert_not_initialize_copy {ARGF.class.new} + assert_not_initialize_copy {Random.new} + assert_not_initialize_copy {//} + assert_not_initialize_copy {/.*/.match("foo")} + st = Struct.new(:foo) + assert_not_initialize_copy {st.new} + assert_not_initialize_copy {Time.now} + end end |