[Bug #19833] Fix index underflow at superclasses of BasicObject

This commit is contained in:
Nobuyoshi Nakada 2023-08-08 19:03:38 +09:00
parent 69292676a2
commit 72d1a790cf
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
Notes: git 2023-08-08 10:55:38 +00:00
2 changed files with 11 additions and 0 deletions

View File

@ -2165,6 +2165,10 @@ rb_class_superclass(VALUE klass)
if (klass == rb_cBasicObject) return Qnil; if (klass == rb_cBasicObject) return Qnil;
rb_raise(rb_eTypeError, "uninitialized class"); rb_raise(rb_eTypeError, "uninitialized class");
} }
if (!RCLASS_SUPERCLASS_DEPTH(klass)) {
return Qnil;
}
else { else {
super = RCLASS_SUPERCLASSES(klass)[RCLASS_SUPERCLASS_DEPTH(klass) - 1]; super = RCLASS_SUPERCLASSES(klass)[RCLASS_SUPERCLASS_DEPTH(klass) - 1];
RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS)); RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS));

View File

@ -96,6 +96,13 @@ class TestClass < Test::Unit::TestCase
def test_superclass_of_basicobject def test_superclass_of_basicobject
assert_equal(nil, BasicObject.superclass) assert_equal(nil, BasicObject.superclass)
assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
begin;
module Mod end
BasicObject.include(Mod)
assert_equal(nil, BasicObject.superclass)
end;
end end
def test_module_function def test_module_function