[Bug #21159] module names should not be modifiable

This commit is contained in:
Nobuyoshi Nakada 2025-02-27 11:07:36 +09:00
parent 1b6fddf4db
commit 931ac960b6
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
Notes: git 2025-02-27 03:06:20 +00:00
2 changed files with 8 additions and 2 deletions

View File

@ -3371,13 +3371,17 @@ class TestModule < Test::Unit::TestCase
m.const_set(:N, Module.new)
assert_match(/\A#<Module:0x\h+>::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

View File

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