summaryrefslogtreecommitdiffstats
path: root/Tools/c-analyzer/c_analyzer
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2020-09-17 07:34:20 (GMT)
committerGitHub <noreply@github.com>2020-09-17 07:34:20 (GMT)
commitdcfaa520c4638a67052a4ff4a2a820be68750ad7 (patch)
treef14c4d4f8d7fb92cfab9be5b732f1bcc57fd4e25 /Tools/c-analyzer/c_analyzer
parent7219e27087baaa8a5693b5bef1b1357bddbffa53 (diff)
downloadcpython-dcfaa520c4638a67052a4ff4a2a820be68750ad7.zip
cpython-dcfaa520c4638a67052a4ff4a2a820be68750ad7.tar.gz
cpython-dcfaa520c4638a67052a4ff4a2a820be68750ad7.tar.bz2
bpo-41715: Fix potential catastrofic backtracking in c_analyzer. (GH-22091)
Diffstat (limited to 'Tools/c-analyzer/c_analyzer')
-rw-r--r--Tools/c-analyzer/c_analyzer/common/info.py12
1 files changed, 6 insertions, 6 deletions
diff --git a/Tools/c-analyzer/c_analyzer/common/info.py b/Tools/c-analyzer/c_analyzer/common/info.py
index 3f3f8c5..1a853a4 100644
--- a/Tools/c-analyzer/c_analyzer/common/info.py
+++ b/Tools/c-analyzer/c_analyzer/common/info.py
@@ -9,7 +9,8 @@ from .util import classonly, _NTBase
UNKNOWN = '???'
-NAME_RE = re.compile(r'^([a-zA-Z]|_\w*[a-zA-Z]\w*|[a-zA-Z]\w*)$')
+# Does not start with digit and contains at least one letter.
+NAME_RE = re.compile(r'(?!\d)(?=.*?[A-Za-z])\w+', re.ASCII)
class ID(_NTBase, namedtuple('ID', 'filename funcname name')):
@@ -50,17 +51,16 @@ class ID(_NTBase, namedtuple('ID', 'filename funcname name')):
"""Fail if the object is invalid (i.e. init with bad data)."""
if not self.name:
raise TypeError('missing name')
- else:
- if not NAME_RE.match(self.name):
- raise ValueError(
- f'name must be an identifier, got {self.name!r}')
+ if not NAME_RE.fullmatch(self.name):
+ raise ValueError(
+ f'name must be an identifier, got {self.name!r}')
# Symbols from a binary might not have filename/funcname info.
if self.funcname:
if not self.filename:
raise TypeError('missing filename')
- if not NAME_RE.match(self.funcname) and self.funcname != UNKNOWN:
+ if not NAME_RE.fullmatch(self.funcname) and self.funcname != UNKNOWN:
raise ValueError(
f'name must be an identifier, got {self.funcname!r}')