summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-06 07:24:07 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-06 07:24:07 +0000
commitbc6dde94202d8c75ac2efae6a7667202c6cb3bb6 (patch)
treedc1962ba4783410c1d707f3bd64c6bd63601ddf5 /parse.y
parent8a4de7abf8850f330f9201fb07aba16a622d1fd2 (diff)
* 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.y14
1 files changed, 13 insertions, 1 deletions
diff --git a/parse.y b/parse.y
index 4796e7453c..252860bc7e 100644
--- a/parse.y
+++ b/parse.y
@@ -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;
}