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
This commit is contained in:
nobu 2017-01-02 00:03:28 +00:00
parent 1c80c388d5
commit 42361548d8

View File

@ -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);