Fix #8175: intersphinx: Potential of regex denial of service by inventory

This commit is contained in:
Takeshi KOMIYA 2020-09-20 17:48:00 +09:00
parent a81c45367a
commit f7b872e673
2 changed files with 7 additions and 1 deletions

View File

@ -35,6 +35,7 @@ Bugs fixed
* #8192: napoleon: description is disappeared when it contains inline literals * #8192: napoleon: description is disappeared when it contains inline literals
* #8172: napoleon: Potential of regex denial of service in google style docs * #8172: napoleon: Potential of regex denial of service in google style docs
* #8169: LaTeX: pxjahyper loaded even when latex_engine is not platex * #8169: LaTeX: pxjahyper loaded even when latex_engine is not platex
* #8175: intersphinx: Potential of regex denial of service by broken inventory
* #8093: The highlight warning has wrong location in some builders (LaTeX, * #8093: The highlight warning has wrong location in some builders (LaTeX,
singlehtml and so on) singlehtml and so on)

View File

@ -122,11 +122,16 @@ class InventoryFile:
for line in stream.read_compressed_lines(): for line in stream.read_compressed_lines():
# be careful to handle names with embedded spaces correctly # be careful to handle names with embedded spaces correctly
m = re.match(r'(?x)(.+?)\s+(\S*:\S*)\s+(-?\d+)\s+?(\S*)\s+(.*)', m = re.match(r'(?x)(.+?)\s+(\S+)\s+(-?\d+)\s+?(\S*)\s+(.*)',
line.rstrip()) line.rstrip())
if not m: if not m:
continue continue
name, type, prio, location, dispname = m.groups() name, type, prio, location, dispname = m.groups()
if ':' not in type:
# wrong type value. type should be in the form of "{domain}:{objtype}"
#
# Note: To avoid the regex DoS, this is implemented in python (refs: #8175)
continue
if type == 'py:module' and type in invdata and name in invdata[type]: if type == 'py:module' and type in invdata and name in invdata[type]:
# due to a bug in 1.1 and below, # due to a bug in 1.1 and below,
# two inventory entries are created # two inventory entries are created