diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-01-02 00:03:28 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-01-02 00:03:28 +0000 |
commit | 42361548d8669fe5ae8e3625aabc0d34c3513b68 (patch) | |
tree | ee106ea540ae75838012542b44c28a965c9ecf8b | |
parent | 1c80c388d5bd48018c419a2ea3ed9f7b7514dfa3 (diff) |
object.c: rb_class_s_new
* object.c (rb_class_new_instance): add pathological check of
klass for extension libraries which do not check given arguments
properly. [ruby-core:78934] [Bug #13093]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | object.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -1886,8 +1886,8 @@ rb_class_allocate_instance(VALUE klass) * */ -VALUE -rb_class_new_instance(int argc, const VALUE *argv, VALUE klass) +static VALUE +rb_class_s_new(int argc, const VALUE *argv, VALUE klass) { VALUE obj; @@ -1897,6 +1897,13 @@ rb_class_new_instance(int argc, const VALUE *argv, VALUE klass) return obj; } +VALUE +rb_class_new_instance(int argc, const VALUE *argv, VALUE klass) +{ + Check_Type(klass, T_CLASS); + return rb_class_s_new(argc, argv, klass); +} + /* * call-seq: * class.superclass -> a_super_class or nil @@ -3580,7 +3587,7 @@ InitVM_Object(void) rb_define_method(rb_cModule, "singleton_class?", rb_mod_singleton_p, 0); rb_define_method(rb_cClass, "allocate", rb_obj_alloc, 0); - rb_define_method(rb_cClass, "new", rb_class_new_instance, -1); + rb_define_method(rb_cClass, "new", rb_class_s_new, -1); rb_define_method(rb_cClass, "initialize", rb_class_initialize, -1); rb_define_method(rb_cClass, "superclass", rb_class_superclass, 0); rb_define_alloc_func(rb_cClass, rb_class_s_alloc); |