ruby-changes:24663
From: nobu <ko1@a...>
Date: Thu, 16 Aug 2012 19:15:41 +0900 (JST)
Subject: [ruby-changes:24663] nobu:r36714 (trunk): object.c: forbid uninitialized class
nobu 2012-08-16 19:15:28 +0900 (Thu, 16 Aug 2012) New Revision: 36714 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36714 Log: object.c: forbid uninitialized class * object.c (rb_class_initialize): forbid inheriting uninitialized class. another class tree not based on BasicObject cannot exist. [ruby-core:47148][Bug #6863] Modified files: trunk/ChangeLog trunk/object.c trunk/test/ruby/test_class.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 36713) +++ ChangeLog (revision 36714) @@ -1,3 +1,9 @@ +Thu Aug 16 19:15:23 2012 Nobuyoshi Nakada <nobu@r...> + + * object.c (rb_class_initialize): forbid inheriting uninitialized + class. another class tree not based on BasicObject cannot exist. + [ruby-core:47148][Bug #6863] + Thu Aug 16 11:52:06 2012 Nobuyoshi Nakada <nobu@r...> * test/-ext-/test_printf.rb (Test_SPrintf#test_{taint,untrust}): use Index: object.c =================================================================== --- object.c (revision 36713) +++ object.c (revision 36714) @@ -1616,6 +1616,9 @@ else { rb_scan_args(argc, argv, "01", &super); rb_check_inheritable(super); + if (super != rb_cBasicObject && !RCLASS_SUPER(super)) { + rb_raise(rb_eTypeError, "can't inherit uninitialized class"); + } } RCLASS_SUPER(klass) = super; rb_make_metaclass(klass, RBASIC(super)->klass); Index: test/ruby/test_class.rb =================================================================== --- test/ruby/test_class.rb (revision 36713) +++ test/ruby/test_class.rb (revision 36714) @@ -203,6 +203,8 @@ def test_uninitialized assert_raise(TypeError) { Class.allocate.new } assert_raise(TypeError) { Class.allocate.superclass } + bug6863 = '[ruby-core:47148]' + assert_raise(TypeError, bug6863) { Class.new(Class.allocate) } end def test_nonascii_name -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/