diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-03-06 07:24:07 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-03-06 07:24:07 +0000 |
commit | bc6dde94202d8c75ac2efae6a7667202c6cb3bb6 (patch) | |
tree | dc1962ba4783410c1d707f3bd64c6bd63601ddf5 /parse.y | |
parent | 8a4de7abf8850f330f9201fb07aba16a622d1fd2 (diff) | |
download | ruby-bc6dde94202d8c75ac2efae6a7667202c6cb3bb6.tar.gz |
* parse.y (parser_tokadd_string): escape simple regexp meta
character termninators.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -6440,6 +6440,18 @@ parser_tokadd_mbchar(struct parser_params *parser, int c) #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c)) +static inline int +simple_re_meta(int c) +{ + switch (c) { + case '$': case '*': case '+': case '.': + case '?': case '^': case '|': + return TRUE; + default: + return FALSE; + } +} + static int parser_tokadd_string(struct parser_params *parser, int func, int term, int paren, long *nest, @@ -6520,7 +6532,7 @@ parser_tokadd_string(struct parser_params *parser, goto non_ascii; } if (func & STR_FUNC_REGEXP) { - if (c == term) { + if (c == term && !simple_re_meta(c)) { tokadd(c); continue; } |