diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-20 05:43:15 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-20 05:43:15 +0000 |
commit | f89238ec0d689f3989c55c4716da500b8c898900 (patch) | |
tree | ddf409196264dc90a3b096e7940f6bd8c5a21ae1 /parse.y | |
parent | 766f9b4aff57b05a19589c55850d1a73f49d5d06 (diff) | |
download | ruby-f89238ec0d689f3989c55c4716da500b8c898900.tar.gz |
parse.y: ignore constant name captures
* parse.y (reg_named_capture_assign_iter): ignore non-local name
captures, including non-ASCII constant names.
[ruby-dev:50719] [Bug #15437]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66463 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -10669,11 +10669,12 @@ reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, ID var; NODE *node, *succ; - if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) || - (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) || - !rb_enc_symname2_p(s, len, enc)) { + if (!len) return ST_CONTINUE; + if (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) return ST_CONTINUE; - } + if (rb_enc_symname_type(s, len, enc, (1U<<ID_LOCAL)) != ID_LOCAL) + return ST_CONTINUE; + var = intern_cstr(s, len, enc); node = node_assign(p, assignable(p, var, 0, arg->loc), NEW_LIT(ID2SYM(var), arg->loc), arg->loc); succ = arg->succ_block; |