New submission from Tim Bell:
Email addresses with a display name starting with a dot ("."), or ending with a
dot without whitespace before the angle bracket trigger exceptions when
accessing the header, after creating the message object with the "default"
policy.
For example:
>>> import email
>>> from email.policy import default
>>> email.message_from_bytes(b'To: . Doe <[email protected]>')['to']
'. Doe <[email protected]>'
>>> email.message_from_bytes(b'To: . Doe <[email protected]>',
>>> policy=default)['to']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/bhat/git/cpython/Lib/email/message.py", line 391, in __getitem__
return self.get(name)
File "/Users/bhat/git/cpython/Lib/email/message.py", line 471, in get
return self.policy.header_fetch_parse(k, v)
File "/Users/bhat/git/cpython/Lib/email/policy.py", line 162, in
header_fetch_parse
return self.header_factory(name, value)
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 586, in
__call__
return self[name](name, value)
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 197, in
__new__
cls.parse(value, kwds)
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 344, in parse
for mb in addr.all_mailboxes]))
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 344, in
<listcomp>
for mb in addr.all_mailboxes]))
File "/Users/bhat/git/cpython/Lib/email/_header_value_parser.py", line 834,
in display_name
return self[0].display_name
File "/Users/bhat/git/cpython/Lib/email/_header_value_parser.py", line 768,
in display_name
return self[0].display_name
File "/Users/bhat/git/cpython/Lib/email/_header_value_parser.py", line 931,
in display_name
if res[0][0].token_type == 'cfws':
AttributeError: 'str' object has no attribute 'token_type'
>>>
>>> email.message_from_bytes(b'To: John X.<[email protected]>')['to']
'John X.<[email protected]>'
>>> email.message_from_bytes(b'To: John X.<[email protected]>',
>>> policy=default)['to']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/bhat/git/cpython/Lib/email/message.py", line 391, in __getitem__
return self.get(name)
File "/Users/bhat/git/cpython/Lib/email/message.py", line 471, in get
return self.policy.header_fetch_parse(k, v)
File "/Users/bhat/git/cpython/Lib/email/policy.py", line 162, in
header_fetch_parse
return self.header_factory(name, value)
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 586, in
__call__
return self[name](name, value)
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 197, in
__new__
cls.parse(value, kwds)
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 344, in parse
for mb in addr.all_mailboxes]))
File "/Users/bhat/git/cpython/Lib/email/headerregistry.py", line 344, in
<listcomp>
for mb in addr.all_mailboxes]))
File "/Users/bhat/git/cpython/Lib/email/_header_value_parser.py", line 834,
in display_name
return self[0].display_name
File "/Users/bhat/git/cpython/Lib/email/_header_value_parser.py", line 768,
in display_name
return self[0].display_name
File "/Users/bhat/git/cpython/Lib/email/_header_value_parser.py", line 936,
in display_name
if res[-1][-1].token_type == 'cfws':
AttributeError: 'str' object has no attribute 'token_type'
----------
components: email
messages: 298836
nosy: barry, r.david.murray, timb07
priority: normal
severity: normal
status: open
title: Exception parsing invalid email address headers starting or ending with
dot
type: behavior
versions: Python 3.5, Python 3.6, Python 3.7
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue30988>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com