Handle folder headers with colons correctly. Based on patch from Johannes Berg.
authorLars Wirzenius <liw@iki.fi>
Sat, 12 Aug 2006 11:07:01 +0000 (14:07 +0300)
committerLars Wirzenius <liw@iki.fi>
Sat, 12 Aug 2006 11:07:01 +0000 (14:07 +0300)
eoc.py
eocTests.py

diff --git a/eoc.py b/eoc.py
index 16dae19..52621bc 100644 (file)
--- a/eoc.py
+++ b/eoc.py
@@ -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
index acf99b3..1ecbfb1 100644 (file)
@@ -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):