mirror of https://github.com/python/cpython
gh-107715: Escape class name in regular expression (GH-107716)
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.
This commit is contained in:
parent
ed64204716
commit
8579327879
|
@ -1110,7 +1110,7 @@ class DocTestFinder:
|
||||||
if source_lines is None:
|
if source_lines is None:
|
||||||
return None
|
return None
|
||||||
pat = re.compile(r'^\s*class\s*%s\b' %
|
pat = re.compile(r'^\s*class\s*%s\b' %
|
||||||
getattr(obj, '__name__', '-'))
|
re.escape(getattr(obj, '__name__', '-')))
|
||||||
for i, line in enumerate(source_lines):
|
for i, line in enumerate(source_lines):
|
||||||
if pat.match(line):
|
if pat.match(line):
|
||||||
lineno = i
|
lineno = i
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix `doctest.DocTestFinder.find` in presence of class names with special characters. Patch by Gertjan van Zwieten.
|
Loading…
Reference in New Issue