utils: fix decoding of invalid headers
[imapami.git] / imapami / utils.py
index abf79b0..291b71f 100644 (file)
@@ -28,6 +28,7 @@
 #
 
 import email.header
+import re
 
 # pylint: disable=deprecated-module
 # see https://www.logilab.org/ticket/2481
@@ -62,7 +63,16 @@ def headers_to_unicode(headers):
     """
     unicode_headers = {}
     for key, hdr in headers.items():
-        value, encoding = email.header.decode_header(hdr)[0]
+        try:
+            value, encoding = email.header.decode_header(hdr)[0]
+        except email.header.HeaderParseError:
+            try:
+                # try to workaround badly formatted RFC2047 tokens
+                hdr = re.sub(r"(==)(?!$)", u"= =", hdr)
+                value, encoding = email.header.decode_header(hdr)[0]
+            except email.header.HeaderParseError:
+                # fallback to wrong decoding
+                value, encoding = hdr, 'utf-8'
         if encoding is None:
             value = unicode(value)
         else: