Issue #22437: Number of capturing groups in regular expression is no longer

limited by 100.
This commit is contained in:
Serhiy Storchaka 2014-09-29 22:49:23 +03:00
parent c31e6227f9
commit 9baa5b2de2
8 changed files with 76 additions and 27 deletions

View file

@ -72,6 +72,8 @@ class Pattern:
def opengroup(self, name=None):
gid = self.groups
self.groups = gid + 1
if self.groups > MAXGROUPS:
raise error("groups number is too large")
if name is not None:
ogid = self.groupdict.get(name, None)
if ogid is not None:
@ -695,8 +697,14 @@ def _parse(source, state):
else:
try:
condgroup = int(condname)
if condgroup < 0:
raise ValueError
except ValueError:
raise error("bad character in group name")
if not condgroup:
raise error("bad group number")
if condgroup >= MAXGROUPS:
raise error("the group number is too large")
else:
# flags
if not source.next in FLAGS:
@ -822,6 +830,8 @@ def parse_template(source, pattern):
index = int(name)
if index < 0:
raise error("negative group number")
if index >= MAXGROUPS:
raise error("the group number is too large")
except ValueError:
if not name.isidentifier():
raise error("bad character in group name")