From f4c7c402d4944c3e1ff1a83925d5e11549ff4e36 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Mon, 29 Nov 2004 03:46:54 +0000 Subject: RFC 2822 describes the characters allowed in a header field name. Conform to this, and add test cases. --- Lib/email/FeedParser.py | 4 +++- Lib/email/test/test_email.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Lib/email/FeedParser.py b/Lib/email/FeedParser.py index 690b7c2..f514728 100644 --- a/Lib/email/FeedParser.py +++ b/Lib/email/FeedParser.py @@ -27,7 +27,9 @@ NLCRE = re.compile('\r\n|\r|\n') NLCRE_bol = re.compile('(\r\n|\r|\n)') NLCRE_eol = re.compile('(\r\n|\r|\n)$') NLCRE_crack = re.compile('(\r\n|\r|\n)') -headerRE = re.compile(r'^(From |[-\w]{2,}:|[\t ])') +# RFC 2822 $3.6.8 Optional fields. ftext is %d33-57 / %d59-126, Any character +# except controls, SP, and ":". +headerRE = re.compile(r'^(From |[\041-\071\073-\176]{2,}:|[\t ])') EMPTYSTRING = '' NL = '\n' diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index c620442..2d3841b3 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -2402,6 +2402,22 @@ Here's the message body eq(msg.get('Header'), value1) eq(msg.get('Next-Header'), value2) + def test_rfc2822_header_syntax(self): + eq = self.assertEqual + m = '>From: foo\nFrom: bar\n!"#QUX;~: zoo\n\nbody' + msg = email.message_from_string(m) + eq(len(msg.keys()), 3) + keys = msg.keys() + keys.sort() + eq(keys, ['!"#QUX;~', '>From', 'From']) + eq(msg.get_payload(), 'body') + + def test_rfc2822_space_not_allowed_in_header(self): + eq = self.assertEqual + m = '>From foo@example.com 11:25:53\nFrom: bar\n!"#QUX;~: zoo\n\nbody' + msg = email.message_from_string(m) + eq(len(msg.keys()), 0) + class TestBase64(unittest.TestCase): -- cgit v0.12