]> granicus.if.org Git - python/commitdiff
Issue #24580: Symbolic group references to open group in re patterns now are
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 18 Jul 2015 20:27:00 +0000 (23:27 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 18 Jul 2015 20:27:00 +0000 (23:27 +0300)
explicitly forbidden as well as numeric group references.

Lib/sre_parse.py
Lib/test/test_re.py
Misc/NEWS

index c0f539dd931ad2e6c924926056f72673760b9524..67f84e940f5f03987aa832e0523664eb23dffe65 100644 (file)
@@ -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
index 5b716125f97400884386a2464c7fe044a1f06746..7a741416b48c74dad593d699e6a65c2fbdd6e7e3 100644 (file)
@@ -224,6 +224,8 @@ class ReTests(unittest.TestCase):
         self.checkPatternError('(?P<a>)(?P<a>)',
                                "redefinition of group name 'a' as group 2; "
                                "was group 1")
+        self.checkPatternError('(?P<a>(?P=a))',
+                               "cannot refer to an open group", 10)
         self.checkPatternError('(?Pxy)', 'unknown extension ?Px')
         self.checkPatternError('(?P<a>)(?P=a', 'missing ), unterminated name', 11)
         self.checkPatternError('(?P=', 'missing group name', 4)
index b400a9121143634a3266e2d55dbf8f2161ac7b14..834ce388fecaf3f9f25f0a3f978afefdf3df6dad 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -19,6 +19,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #24580: Symbolic group references to open group in re patterns now are
+  explicitly forbidden as well as numeric group references.
+
 - Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes.
 
 - Issue #24631: Fixed regression in the timeit module with multiline setup.