Skip to content

Commit dcfaa52

Browse files
bpo-41715: Fix potential catastrofic backtracking in c_analyzer. (pythonGH-22091)
1 parent 7219e27 commit dcfaa52

File tree

1 file changed

+6
-6
lines changed
  • Tools/c-analyzer/c_analyzer/common

1 file changed

+6
-6
lines changed

Tools/c-analyzer/c_analyzer/common/info.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
UNKNOWN = '???'
1111

12-
NAME_RE = re.compile(r'^([a-zA-Z]|_\w*[a-zA-Z]\w*|[a-zA-Z]\w*)$')
12+
# Does not start with digit and contains at least one letter.
13+
NAME_RE = re.compile(r'(?!\d)(?=.*?[A-Za-z])\w+', re.ASCII)
1314

1415

1516
class ID(_NTBase, namedtuple('ID', 'filename funcname name')):
@@ -50,17 +51,16 @@ def validate(self):
5051
"""Fail if the object is invalid (i.e. init with bad data)."""
5152
if not self.name:
5253
raise TypeError('missing name')
53-
else:
54-
if not NAME_RE.match(self.name):
55-
raise ValueError(
56-
f'name must be an identifier, got {self.name!r}')
54+
if not NAME_RE.fullmatch(self.name):
55+
raise ValueError(
56+
f'name must be an identifier, got {self.name!r}')
5757

5858
# Symbols from a binary might not have filename/funcname info.
5959

6060
if self.funcname:
6161
if not self.filename:
6262
raise TypeError('missing filename')
63-
if not NAME_RE.match(self.funcname) and self.funcname != UNKNOWN:
63+
if not NAME_RE.fullmatch(self.funcname) and self.funcname != UNKNOWN:
6464
raise ValueError(
6565
f'name must be an identifier, got {self.funcname!r}')
6666

0 commit comments

Comments
 (0)