diff options
author | Lars Wirzenius <liw@iki.fi> | 2006-08-12 14:07:01 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@iki.fi> | 2006-08-12 14:07:01 +0300 |
commit | 747343e09d2930ebc783f9cc657a87877e823fb8 (patch) | |
tree | 5e4766962aa5e5eafb2e6b2f24d7531ade328e99 | |
parent | d7274d7ec9adf3186386a740572615660016f2ea (diff) | |
download | eoc-747343e09d2930ebc783f9cc657a87877e823fb8.tar.gz |
Handle folder headers with colons correctly. Based on patch from Johannes Berg.
-rw-r--r-- | eoc.py | 12 | ||||
-rw-r--r-- | eocTests.py | 24 |
2 files changed, 34 insertions, 2 deletions
@@ -850,15 +850,23 @@ class MailingList: return mail headers = mail[:endpos].split("\n") body = mail[endpos:] + + headers_to_remove = [x.lower() for x in headers_to_remove] remaining = [] add_continuation_lines = 0 + for header in headers: - pos = header.find(":") - if pos == -1: + if header[0] in [' ','\t']: + # this is a continuation line if add_continuation_lines: remaining.append(header) else: + pos = header.find(":") + if pos == -1: + # malformed message, try to remove the junk + add_continuation_lines = 0 + continue name = header[:pos].lower() if name in headers_to_remove: add_continuation_lines = 0 diff --git a/eocTests.py b/eocTests.py index acf99b3..1ecbfb1 100644 --- a/eocTests.py +++ b/eocTests.py @@ -244,6 +244,30 @@ class DotDirTestCases(unittest.TestCase): mlm = eoc.MailingListManager(DOTDIR) self.dotdir_is_ok() + +class RemoveSomeHeadersTest(unittest.TestCase): + + def testRemoveSomeHeaders(self): + mlm = eoc.MailingListManager(DOTDIR) + ml = eoc.MailingList(mlm, "list@example.com") + mail = """\ +Header-1: this is a simple header +Header-2: this + is + a + complex header with a colon: yes it is +Header-3: odd numbered headers are simple + +Body. +""" + mail2 = ml.remove_some_headers(mail, ["Header-2"]) + self.failUnlessEqual(mail2, """\ +Header-1: this is a simple header +Header-3: odd numbered headers are simple + +Body. +""") + class ListBase(unittest.TestCase): def setUp(self): |