diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-07-18 23:27:00 +0300 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-07-18 23:27:00 +0300 |
commit | 485407ce1e4dc3b2005bc1c72ce6020c28f90030 (patch) | |
tree | 8082f5971a787e457c46b85c17030b53e4b13a46 /Lib | |
parent | 2489bd5d4e45b2a1d90f9336bf528ab1bba2d796 (diff) | |
download | cpython-git-485407ce1e4dc3b2005bc1c72ce6020c28f90030.tar.gz |
Issue #24580: Symbolic group references to open group in re patterns now are
explicitly forbidden as well as numeric group references.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/sre_parse.py | 3 | ||||
-rw-r--r-- | Lib/test/test_re.py | 2 |
2 files changed, 5 insertions, 0 deletions
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py index c0f539dd93..67f84e940f 100644 --- a/Lib/sre_parse.py +++ b/Lib/sre_parse.py @@ -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 --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 5b716125f9..7a741416b4 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -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) |