[issue42909] Email header with ; ; ; ; stuffing takes very long to parse

robin report at bugs.python.org
Tue Jan 12 08:58:13 EST 2021


robin <robin.eriksson at f-secure.com> added the comment:

python -mtrace -t repro.py reveals a long string of these:


 --- modulename: errors, funcname: __init__
errors.py(85):         super().__init__(*args, **kw)
 --- modulename: errors, funcname: __init__
errors.py(37):         if line is not None:
errors.py(38):             super().__init__(line)
errors.py(39):         self.line = line
_header_value_parser.py(2417):         if value and value[0] != ';':
_header_value_parser.py(2426):         if value:
_header_value_parser.py(2428):             mime_parameters.append(ValueTerminal(';', 'parameter-separator'))
 --- modulename: _header_value_parser, funcname: __new__
_header_value_parser.py(855):         self = super().__new__(cls, value)
_header_value_parser.py(856):         self.token_type = token_type
_header_value_parser.py(857):         self.defects = []
_header_value_parser.py(858):         return self
_header_value_parser.py(2429):             value = value[1:]
_header_value_parser.py(2394):     while value:
_header_value_parser.py(2395):         try:
_header_value_parser.py(2396):             token, value = get_parameter(value)
 --- modulename: _header_value_parser, funcname: get_parameter
_header_value_parser.py(2252):     param = Parameter()
 --- modulename: _header_value_parser, funcname: __init__
_header_value_parser.py(110):         super().__init__(*args, **kw)
_header_value_parser.py(111):         self.defects = []
_header_value_parser.py(2253):     token, value = get_attribute(value)
 --- modulename: _header_value_parser, funcname: get_attribute
_header_value_parser.py(2135):     attribute = Attribute()
 --- modulename: _header_value_parser, funcname: __init__
_header_value_parser.py(110):         super().__init__(*args, **kw)
_header_value_parser.py(111):         self.defects = []
_header_value_parser.py(2136):     if value and value[0] in CFWS_LEADER:
_header_value_parser.py(2139):     if value and value[0] in ATTRIBUTE_ENDS:
_header_value_parser.py(2140):         raise errors.HeaderParseError(
_header_value_parser.py(2141):             "expected token but found '{}'".format(value))
_header_value_parser.py(2398):         except errors.HeaderParseError as err:
_header_value_parser.py(2399):             leader = None
_header_value_parser.py(2400):             if value[0] in CFWS_LEADER:
_header_value_parser.py(2402):             if not value:
_header_value_parser.py(2405):             if value[0] == ';':
_header_value_parser.py(2406):                 if leader is not None:
_header_value_parser.py(2408):                 mime_parameters.defects.append(errors.InvalidHeaderDefect(
_header_value_parser.py(2409):                     "parameter entry with no content"))


... which would make sense as such, except at the end, the list of defects is empty.  And, of course, it should not take so long.

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue42909>
_______________________________________


More information about the Python-bugs-list mailing list