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)