[Python-checkins] cpython (3.5): Issue #25554: Got rid of circular references in regular expression parsing.

serhiy.storchaka python-checkins at python.org
Thu Nov 5 10:51:40 EST 2015


https://hg.python.org/cpython/rev/7f4fca8f13a2
changeset:   98971:7f4fca8f13a2
branch:      3.5
parent:      98967:1e87bcf20707
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Thu Nov 05 17:49:26 2015 +0200
summary:
  Issue #25554: Got rid of circular references in regular expression parsing.

files:
  Lib/sre_parse.py |  12 ++++++------
  Misc/NEWS        |   2 ++
  2 files changed, 8 insertions(+), 6 deletions(-)


diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -70,14 +70,14 @@
     def __init__(self):
         self.flags = 0
         self.groupdict = {}
-        self.subpatterns = [None]  # group 0
+        self.groupwidths = [None]  # group 0
         self.lookbehindgroups = None
     @property
     def groups(self):
-        return len(self.subpatterns)
+        return len(self.groupwidths)
     def opengroup(self, name=None):
         gid = self.groups
-        self.subpatterns.append(None)
+        self.groupwidths.append(None)
         if self.groups > MAXGROUPS:
             raise error("too many groups")
         if name is not None:
@@ -88,9 +88,9 @@
             self.groupdict[name] = gid
         return gid
     def closegroup(self, gid, p):
-        self.subpatterns[gid] = p
+        self.groupwidths[gid] = p.getwidth()
     def checkgroup(self, gid):
-        return gid < self.groups and self.subpatterns[gid] is not None
+        return gid < self.groups and self.groupwidths[gid] is not None
 
     def checklookbehindgroup(self, gid, source):
         if self.lookbehindgroups is not None:
@@ -195,7 +195,7 @@
                 lo = lo + 1
                 hi = hi + 1
             elif op is GROUPREF:
-                i, j = self.pattern.subpatterns[av].getwidth()
+                i, j = self.pattern.groupwidths[av]
                 lo = lo + i
                 hi = hi + j
             elif op is GROUPREF_EXISTS:
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -54,6 +54,8 @@
 Library
 -------
 
+- Issue #25554: Got rid of circular references in regular expression parsing.
+
 - Issue #25510: fileinput.FileInput.readline() now returns b'' instead of ''
   at the end if the FileInput was opened with binary mode.
   Patch by Ryosuke Ito.

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list