Abhilash Raj <[email protected]> added the comment:
I just wanted to report before I forgot and hence missed some details, turns
out the bug report was slightly wrong too. The testcase I provided wasn't right.
Here is the right test case to reproduce the exception with master:
# bpo_37491.py
from email.parser import BytesParser, Parser
from email.policy import default
payload = 'Content-Type:"'
msg = Parser(policy=default).parsestr(payload)
print(msg.get('content-type'))
$ ./python bpo_37491.py
Traceback (most recent call last):
File "bpo_37491.py", line 5, in <module>
msg = Parser(policy=default).parsestr(payload)
File "/home/maxking/Documents/cpython/Lib/email/parser.py", line 68, in
parsestr
return self.parse(StringIO(text), headersonly=headersonly)
File "/home/maxking/Documents/cpython/Lib/email/parser.py", line 58, in parse
return feedparser.close()
File "/home/maxking/Documents/cpython/Lib/email/feedparser.py", line 187, in
close
self._call_parse()
File "/home/maxking/Documents/cpython/Lib/email/feedparser.py", line 180, in
_call_parse
self._parse()
File "/home/maxking/Documents/cpython/Lib/email/feedparser.py", line 256, in
_parsegen
if self._cur.get_content_type() == 'message/delivery-status':
File "/home/maxking/Documents/cpython/Lib/email/message.py", line 578, in
get_content_type
value = self.get('content-type', missing)
File "/home/maxking/Documents/cpython/Lib/email/message.py", line 471, in get
return self.policy.header_fetch_parse(k, v)
File "/home/maxking/Documents/cpython/Lib/email/policy.py", line 163, in
header_fetch_parse
return self.header_factory(name, value)
File "/home/maxking/Documents/cpython/Lib/email/headerregistry.py", line 602,
in __call__
return self[name](name, value)
File "/home/maxking/Documents/cpython/Lib/email/headerregistry.py", line 197,
in __new__
cls.parse(value, kwds)
File "/home/maxking/Documents/cpython/Lib/email/headerregistry.py", line 447,
in parse
kwds['decoded'] = str(parse_tree)
File "/home/maxking/Documents/cpython/Lib/email/_header_value_parser.py",
line 126, in __str__
return ''.join(str(x) for x in self)
File "/home/maxking/Documents/cpython/Lib/email/_header_value_parser.py",
line 126, in <genexpr>
return ''.join(str(x) for x in self)
File "/home/maxking/Documents/cpython/Lib/email/_header_value_parser.py",
line 796, in __str__
for name, value in self.params:
File "/home/maxking/Documents/cpython/Lib/email/_header_value_parser.py",
line 770, in params
value = param.param_value
File "/home/maxking/Documents/cpython/Lib/email/_header_value_parser.py",
line 679, in param_value
return token.stripped_value
File "/home/maxking/Documents/cpython/Lib/email/_header_value_parser.py",
line 710, in stripped_value
token = self[0]
IndexError: list index out of range
This time I attached a correct patch instead of copy-pasting only the diff :)
About IndexError, I agree, it must be an empty string value and not a None
value.
----------
keywords: +patch
Added file: https://bugs.python.org/file48462/fix-indexerror.patch
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue37491>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com