aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--parse.y1
-rw-r--r--test/ruby/test_regexp.rb6
3 files changed, 12 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cb5388ff6f..4005615b8c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Dec 30 23:33:36 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (simple_re_meta): escaped closing parenthsis has different
+ meaning. [Bug #7610] [ruby-core:51088]
+
Sun Dec 30 12:09:47 2012 Charlie Somerville <charlie@charliesomerville.com>
* configure.in: use 4 argument form of AC_CHECK_HEADERS to force
diff --git a/parse.y b/parse.y
index 1b57719296..f9e832996e 100644
--- a/parse.y
+++ b/parse.y
@@ -5971,6 +5971,7 @@ simple_re_meta(int c)
switch (c) {
case '$': case '*': case '+': case '.':
case '?': case '^': case '|':
+ case ')':
return TRUE;
default:
return FALSE;
diff --git a/test/ruby/test_regexp.rb b/test/ruby/test_regexp.rb
index 03c7fd4443..faafe336ec 100644
--- a/test/ruby/test_regexp.rb
+++ b/test/ruby/test_regexp.rb
@@ -179,6 +179,12 @@ class TestRegexp < Test::Unit::TestCase
assert_equal(expected, result)
end
+ def test_source_escaped_paren
+ bug7610 = '[ruby-core:51088]'
+ s = '\(a\)'
+ assert_equal(/#{s}/, eval("%r(#{s})"), bug7610)
+ end
+
def test_source_unescaped
expected, result = "!\"#%&',-/:;=@_`~".each_char.map {|c|
[