From 574dafe14a8075d97b650c56a5e3077bf1ca0029 Mon Sep 17 00:00:00 2001
From: Jan Philipp Timme <jan.philipp@timme.it>
Date: Tue, 14 Apr 2020 11:42:13 +0200
Subject: [PATCH] Fix uncaught exceptions while decoding

---
 main.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/main.py b/main.py
index 36594bd..0b3ae39 100644
--- a/main.py
+++ b/main.py
@@ -32,7 +32,12 @@ def get_decoded_header(value):
     decoded_header_items = decode_header(value)
     decoded_header_value = ''
     for item in decoded_header_items:
-        decoded_item = item[0].decode(item[1], 'ignore') if item[1] is not None else item[0]
+        try:
+            decoded_item = item[0].decode(item[1], 'ignore') if item[1] is not None else item[0]
+        except:
+            logger.warning(f"Decoding went wrong for value '{value}'!")
+            # Pretend decoded item is empty :-(
+            decoded_item = ''
         if isinstance(decoded_item, bytes):
             decoded_item = decoded_item.decode('ascii', 'ignore')
         decoded_header_value += decoded_item
@@ -121,6 +126,14 @@ def main():
     Milter.runmilter("SuspiciousFromMilter", config.milter_socket, config.milter_timeout, rmsock=False)
     logger.info(f"Milter finished running.")
 
+def test():
+    # simple method to deal with unexpected exceptions on the fly :(
+    test_from_value = '=?UNKNOWN?Q?Nat=E1lia?= Reis via DBWorld <dbworld@cs.wisc.edu>'
+    logger.info(f"Begin of test().")
+    test_instance = SuspiciousFrom()
+    test_instance.header('from', test_from_value)
+    logger.info(f"End of test().")
 
 if __name__ == "__main__":
+    #test()
     main()
-- 
GitLab