8000 [Bug #21159] module names should not be modifiable · github/ruby@931ac96 · GitHub
[go: up one dir, main page]

Skip to content

Commit 931ac96

Browse files
committed
[Bug #21159] module names should not be modifiable
1 parent 1b6fddf commit 931ac96

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

test/ruby/test_module.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3371,13 +3371,17 @@ def test_set_temporary_name
33713371
m.const_set(:N, Module.new)
33723372

33733373
assert_match(/\A#<Module:0x\h+>::N\z/, m::N.name)
3374-
m::N.set_temporary_name("fake_name_under_M")
3374+
m::N.set_temporary_name(name = "fake_name_under_M")
3375+
name.upcase!
33753376
assert_equal("fake_name_under_M", m::N.name)
3377+
assert_raise(FrozenError) {m::N.name.upcase!}
33763378
m::N.set_temporary_name(nil)
33773379
assert_nil(m::N.name)
33783380

3379-
m.set_temporary_name("fake_name")
3381+
m.set_temporary_name(name = "fake_name")
3382+
name.upcase!
33803383
assert_equal("fake_name", m.name)
3384+
assert_raise(FrozenError) {m.name.upcase!}
33813385

33823386
m.set_temporary_name(nil)
33833387
assert_nil m.name

variable.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,8 @@ rb_mod_set_temporary_name(VALUE mod, VALUE name)
238238
rb_raise(rb_eArgError, "the temporary name must not be a constant path to avoid confusion");
239239
}
240240

241+
name = rb_str_new_frozen(name);
242+
241243
// Set the temporary classpath to the given name:
242244
RCLASS_SET_CLASSPATH(mod, name, FALSE);
243245
}

0 commit comments

Comments
 (0)
0