[3.11] gh-107715: Escape class name in regular expression (GH-107716) (GH-107727)

This patch escapes the class name before embedding it in the regular expression
for `pat` in `doctest.DocTestFinder._find_lineno`. While class names do not
ordinarily contain special characters, it is possible to encounter these when a
class is created dynamically. Escaping the name will correctly return `None` in
this scenario, rather than potentially matching a different class or raising
`re.error` depending on the symbols used.
(cherry picked from commit 8579327879)

Co-authored-by: Gertjan van Zwieten <git@gjvz.nl>
This commit is contained in:
Miss Islington (bot) 2023-08-12 04:57:49 -07:00 committed by GitHub
parent ec254c5dfa
commit 5f36e5ca5f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 2 additions and 1 deletions

View file

@ -1104,7 +1104,7 @@ class DocTestFinder:
if source_lines is None:
return None
pat = re.compile(r'^\s*class\s*%s\b' %
getattr(obj, '__name__', '-'))
re.escape(getattr(obj, '__name__', '-')))
for i, line in enumerate(source_lines):
if pat.match(line):
lineno = i

View file

@ -0,0 +1 @@
Fix :meth:`doctest.DocTestFinder.find` in presence of class names with special characters. Patch by Gertjan van Zwieten.