Mercurial > cpython-lru_cache-weakref
diff Lib/email/_header_value_parser.py @ 77165:a66bf07fca4d
Recognize '<>' as a special case of an angle-addr in header_value_parser.
Although '<>' is invalid according to RFC 5322, SMTP uses it for various
things, and it sometimes ends up in email headers. This patch changes
get_angle_addr to recognize it and just register a Defect instead of raising a
parsing error.
| author | R David Murray <rdmurray@bitdance.com> |
|---|---|
| date | Sat, 26 May 2012 14:31:12 -0400 |
| parents | 0189b9d2d6bc |
| children | 0adccb941200 |
line wrap: on
line diff
--- a/Lib/email/_header_value_parser.py Sat May 26 14:28:21 2012 -0400 +++ b/Lib/email/_header_value_parser.py Sat May 26 14:31:12 2012 -0400 @@ -791,6 +791,8 @@ for x in self: if x.token_type == 'addr-spec': return x.addr_spec + else: + return '<>' class ObsRoute(TokenList): @@ -1829,6 +1831,14 @@ "expected angle-addr but found '{}'".format(value)) angle_addr.append(ValueTerminal('<', 'angle-addr-start')) value = value[1:] + # Although it is not legal per RFC5322, SMTP uses '<>' in certain + # circumstances. + if value[0] == '>': + angle_addr.append(ValueTerminal('>', 'angle-addr-end')) + angle_addr.defects.append(errors.InvalidHeaderDefect( + "null addr-spec in angle-addr")) + value = value[1:] + return angle_addr, value try: token, value = get_addr_spec(value) except errors.HeaderParseError: @@ -1838,7 +1848,7 @@ "obsolete route specification in angle-addr")) except errors.HeaderParseError: raise errors.HeaderParseError( - "expected addr-spec or but found '{}'".format(value)) + "expected addr-spec or obs-route but found '{}'".format(value)) angle_addr.append(token) token, value = get_addr_spec(value) angle_addr.append(token)
