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 <j...@example.com>')['to'] '. Doe <j...@example.com>' >>> email.message_from_bytes(b'To: . Doe <j...@example.com>', >>> 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.<j...@example.com>')['to'] 'John X.<j...@example.com>' >>> email.message_from_bytes(b'To: John X.<j...@example.com>', >>> 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 <rep...@bugs.python.org> <http://bugs.python.org/issue30988> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com