diff options
| author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-23 16:44:41 +0000 |
|---|---|---|
| committer | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-23 16:44:41 +0000 |
| commit | 9d919ae7bf4279b0ad25ff9622ff929849a3d3ba (patch) | |
| tree | 3fd67023dfc8cecb15e125ca0367c196087d976c | |
| parent | 82e58ca5334997340ead069ec193fe0e44b2f972 (diff) | |
| download | ruby-9d919ae7bf4279b0ad25ff9622ff929849a3d3ba.tar.gz ruby-9d919ae7bf4279b0ad25ff9622ff929849a3d3ba.tar.xz ruby-9d919ae7bf4279b0ad25ff9622ff929849a3d3ba.zip | |
* ext/ext/dl/handle.c (rb_dlhandle_initialize) added rb_secure(2)
[ruby-core:25762]
* ext/dl/dl.c (rb_dl_dlopen) removed rb_secure(2)
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ext/dl/dl.c | 1 | ||||
| -rw-r--r-- | ext/dl/handle.c | 2 | ||||
| -rw-r--r-- | test/dl/test_handle.rb | 27 |
3 files changed, 29 insertions, 1 deletions
diff --git a/ext/dl/dl.c b/ext/dl/dl.c index 00762c5be..6bef7bb32 100644 --- a/ext/dl/dl.c +++ b/ext/dl/dl.c @@ -13,7 +13,6 @@ ID rbdl_id_stdcall; VALUE rb_dl_dlopen(int argc, VALUE argv[], VALUE self) { - rb_secure(2); return rb_class_new_instance(argc, argv, rb_cDLHandle); } diff --git a/ext/dl/handle.c b/ext/dl/handle.c index 0db66c70b..a9df5d611 100644 --- a/ext/dl/handle.c +++ b/ext/dl/handle.c @@ -114,6 +114,8 @@ rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self) rb_bug("rb_dlhandle_new"); } + rb_secure(2); + #if defined(HAVE_WINDOWS_H) if( !clib ){ HANDLE rb_libruby_handle(void); diff --git a/test/dl/test_handle.rb b/test/dl/test_handle.rb new file mode 100644 index 000000000..d46e16c08 --- /dev/null +++ b/test/dl/test_handle.rb @@ -0,0 +1,27 @@ +require 'test_base' + +module DL + class TestHandle < TestBase + def test_dlopen_returns_handle + assert_instance_of DL::Handle, dlopen(LIBC_SO) + end + + def test_dlopen_safe + assert_raises(SecurityError) do + Thread.new do + $SAFE = 2 + dlopen(LIBC_SO) + end.join + end + end + + def test_initialize_safe + assert_raises(SecurityError) do + Thread.new do + $SAFE = 2 + DL::Handle.new(LIBC_SO) + end.join + end + end + end +end |
