summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@ruby-lang.org>2023-08-12 13:51:03 +0900
committernagachika <nagachika@ruby-lang.org>2023-08-12 13:51:03 +0900
commitb11f238a811513b31c4f65c822370ac470f438dc (patch)
tree1927d8e27f3cbd4b5a9a586a87dd39dc0964bc35
parent3c9cb7031154b8666d600b0055ba868e18805dc8 (diff)
merge revision(s) 72d1a790cfe0e4a457db98c587f1acaa5e39f001: [Backport #19833]
[Bug #19833] Fix index underflow at superclasses of `BasicObject` --- object.c | 4 ++++ test/ruby/test_class.rb | 7 +++++++ 2 files changed, 11 insertions(+)
-rw-r--r--object.c4
-rw-r--r--test/ruby/test_class.rb7
-rw-r--r--version.h2
3 files changed, 12 insertions, 1 deletions
diff --git a/object.c b/object.c
index 04e2af96e7..48dd1e7e6e 100644
--- a/object.c
+++ b/object.c
@@ -2079,6 +2079,10 @@ rb_class_superclass(VALUE klass)
if (klass == rb_cBasicObject) return Qnil;
rb_raise(rb_eTypeError, "uninitialized class");
}
+
+ if (!RCLASS_SUPERCLASS_DEPTH(klass)) {
+ return Qnil;
+ }
else {
super = RCLASS_SUPERCLASSES(klass)[RCLASS_SUPERCLASS_DEPTH(klass) - 1];
RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS));
diff --git a/test/ruby/test_class.rb b/test/ruby/test_class.rb
index 5086e60398..300ab950ac 100644
--- a/test/ruby/test_class.rb
+++ b/test/ruby/test_class.rb
@@ -96,6 +96,13 @@ class TestClass < Test::Unit::TestCase
def test_superclass_of_basicobject
assert_equal(nil, BasicObject.superclass)
+
+ assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
+ begin;
+ module Mod end
+ BasicObject.include(Mod)
+ assert_equal(nil, BasicObject.superclass)
+ end;
end
def test_module_function
diff --git a/version.h b/version.h
index b0a66d5b0a..ff4e47e0c6 100644
--- a/version.h
+++ b/version.h
@@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 2
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 109
+#define RUBY_PATCHLEVEL 110
#include "ruby/version.h"
#include "ruby/internal/abi.h"