From 931ac960b6d11937364b6c4e847fdd575ee67980 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 27 Feb 2025 11:07:36 +0900 Subject: [PATCH] [Bug #21159] module names should not be modifiable --- test/ruby/test_module.rb | 8 ++++++-- variable.c | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/ruby/test_module.rb b/test/ruby/test_module.rb index 969cf63311..5d254452c6 100644 --- a/test/ruby/test_module.rb +++ b/test/ruby/test_module.rb @@ -3371,13 +3371,17 @@ class TestModule < Test::Unit::TestCase m.const_set(:N, Module.new) assert_match(/\A#::N\z/, m::N.name) - m::N.set_temporary_name("fake_name_under_M") + m::N.set_temporary_name(name = "fake_name_under_M") + name.upcase! assert_equal("fake_name_under_M", m::N.name) + assert_raise(FrozenError) {m::N.name.upcase!} m::N.set_temporary_name(nil) assert_nil(m::N.name) - m.set_temporary_name("fake_name") + m.set_temporary_name(name = "fake_name") + name.upcase! assert_equal("fake_name", m.name) + assert_raise(FrozenError) {m.name.upcase!} m.set_temporary_name(nil) assert_nil m.name diff --git a/variable.c b/variable.c index cef867c701..2d022d59b1 100644 --- a/variable.c +++ b/variable.c @@ -238,6 +238,8 @@ rb_mod_set_temporary_name(VALUE mod, VALUE name) rb_raise(rb_eArgError, "the temporary name must not be a constant path to avoid confusion"); } + name = rb_str_new_frozen(name); + // Set the temporary classpath to the given name: RCLASS_SET_CLASSPATH(mod, name, FALSE); }