SF bug #1347874; FeedParser does not comply with RFC2822.

Change headerRE as suggested in the bug report, so that single character
headers are accepted.  Test case added too.  Will backport to Python 2.4.
This commit is contained in:
Barry Warsaw 2006-01-17 05:58:08 +00:00
parent 20bad74d63
commit 6153201274
2 changed files with 11 additions and 2 deletions

View File

@ -1,4 +1,4 @@
# Copyright (C) 2004 Python Software Foundation # Copyright (C) 2004-2006 Python Software Foundation
# Authors: Baxter, Wouters and Warsaw # Authors: Baxter, Wouters and Warsaw
# Contact: email-sig@python.org # Contact: email-sig@python.org
@ -29,7 +29,7 @@ NLCRE_eol = re.compile('(\r\n|\r|\n)$')
NLCRE_crack = re.compile('(\r\n|\r|\n)') NLCRE_crack = re.compile('(\r\n|\r|\n)')
# RFC 2822 $3.6.8 Optional fields. ftext is %d33-57 / %d59-126, Any character # RFC 2822 $3.6.8 Optional fields. ftext is %d33-57 / %d59-126, Any character
# except controls, SP, and ":". # except controls, SP, and ":".
headerRE = re.compile(r'^(From |[\041-\071\073-\176]{2,}:|[\t ])') headerRE = re.compile(r'^(From |[\041-\071\073-\176]{1,}:|[\t ])')
EMPTYSTRING = '' EMPTYSTRING = ''
NL = '\n' NL = '\n'

View File

@ -2467,6 +2467,15 @@ Here's the message body
msg = email.message_from_string(m) msg = email.message_from_string(m)
eq(len(msg.keys()), 0) eq(len(msg.keys()), 0)
def test_rfc2822_one_character_header(self):
eq = self.assertEqual
m = 'A: first header\nB: second header\nCC: third header\n\nbody'
msg = email.message_from_string(m)
headers = msg.keys()
headers.sort()
eq(headers, ['A', 'B', 'CC'])
eq(msg.get_payload(), 'body')
class TestBase64(unittest.TestCase): class TestBase64(unittest.TestCase):