From 68e61d419b3e40aaaa599fbd004d1c9c6f442155 Mon Sep 17 00:00:00 2001 From: Scott Kitterman Date: Mon, 23 Sep 2019 10:28:43 -0400 Subject: [PATCH] Catch more ascii encoding errors to improve resilience against bad data (LP: #1844189) --- CHANGES | 2 ++ dkimpy_milter/__init__.py | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index dee7787..ac466e7 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,8 @@ conversion issues - Fix variable initialization so mailformed mails missing body From do not cause a traceback (LP: #1844161) + - Catch more ascii encoding errors to improve resilience against bad data + (LP: #1844189) 1.1.0 2019-04-12 - Add SubDomains option to enable signing for sub-domains (LP: #1811535) diff --git a/dkimpy_milter/__init__.py b/dkimpy_milter/__init__.py index 3f15f8c..94b2059 100644 --- a/dkimpy_milter/__init__.py +++ b/dkimpy_milter/__init__.py @@ -149,7 +149,11 @@ class dkimMilter(Milter.Base): elif lname == 'authentication-results': self.arheaders.append(val) if self.fp: - self.fp.write(b"%s: %s\n" % (codecs.encode(name, 'ascii'), codecs.encode(val, 'ascii'))) + try: + self.fp.write(b"%s: %s\n" % (codecs.encode(name, 'ascii'), codecs.encode(val, 'ascii'))) + except: + # Don't choke on header fields with non-ascii garbage in them. + pass return Milter.CONTINUE @Milter.noreply @@ -305,8 +309,13 @@ class dkimMilter(Milter.Base): self.header_i = codecs.decode(d.signature_fields.get(b'i'), 'ascii') except TypeError as x: self.header_i = None - self.header_d = codecs.decode(d.signature_fields.get(b'd'), 'ascii') - self.header_a = codecs.decode(d.signature_fields.get(b'a'), 'ascii') + try: + self.header_d = codecs.decode(d.signature_fields.get(b'd'), 'ascii') + self.header_a = codecs.decode(d.signature_fields.get(b'a'), 'ascii') + except Exception as x: + self.dkim_comment = str(x) + if milterconfig.get('Syslog'): + syslog.syslog("check_dkim: {0}".format(x)) if res: if (milterconfig.get('Syslog') and (milterconfig.get('SyslogSuccess') or