diff -r 2f86a69c3220 Lib/sre_parse.py
--- a/Lib/sre_parse.py Tue Jul 07 00:34:37 2015 -0500
+++ b/Lib/sre_parse.py Tue Jul 07 12:29:54 2015 +0300
@@ -675,6 +675,9 @@ def _parse(source, state):
if gid is None:
msg = "unknown group name %r" % name
raise source.error(msg, len(name) + 1)
+ if not state.checkgroup(gid):
+ raise source.error("cannot refer to an open group",
+ len(name) + 1)
state.checklookbehindgroup(gid, source)
subpatternappend((GROUPREF, gid))
continue
diff -r 2f86a69c3220 Lib/test/test_re.py
--- a/Lib/test/test_re.py Tue Jul 07 00:34:37 2015 -0500
+++ b/Lib/test/test_re.py Tue Jul 07 12:29:54 2015 +0300
@@ -224,6 +224,8 @@ class ReTests(unittest.TestCase):
self.checkPatternError('(?P)(?P)',
"redefinition of group name 'a' as group 2; "
"was group 1")
+ self.checkPatternError('(?P(?P=a))',
+ "cannot refer to an open group", 10)
self.checkPatternError('(?Pxy)', 'unknown extension ?Px')
self.checkPatternError('(?P)(?P=a', 'missing ), unterminated name', 11)
self.checkPatternError('(?P=', 'missing group name', 4)