diff --git a/ChangeLog b/ChangeLog index 48c4203e74..95d4e1aaae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,7 @@ -Sat Dec 14 01:31:52 2013 Nobuyoshi Nakada +Sat Dec 14 11:11:34 2013 Nobuyoshi Nakada + + * object.c (rb_mod_const_get): already interned junk name may be + valid nested class path. * eval.c (rb_rescue2): reuse tags pushed for body proc to protect rescue proc too. diff --git a/object.c b/object.c index fce1ea3c36..a7dd8c6685 100644 --- a/object.c +++ b/object.c @@ -2083,12 +2083,14 @@ rb_mod_const_get(int argc, VALUE *argv, VALUE mod) rb_scan_args(argc, argv, "11", &name, &recur); } - id = rb_check_id(&name); - if (id) { + if (SYMBOL_P(name)) { + id = ID2SYM(name); if (!rb_is_const_id(id)) goto wrong_id; return RTEST(recur) ? rb_const_get(mod, id) : rb_const_get_at(mod, id); } + name = StringValue(name); + enc = rb_enc_get(name); path = RSTRING_PTR(name);