From be92e5c5b1f0a6e31893be8bc21ede1a62eed996 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 1ffbdd3..aae1f84 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ 1.1.2 UNRELEASED - 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.1 2019-09-06 - Fix startup logging so it provides information at a useful time diff --git a/dkimpy_milter/__init__.py b/dkimpy_milter/__init__.py index 17bcc11..6bc567d 100644 --- a/dkimpy_milter/__init__.py +++ b/dkimpy_milter/__init__.py @@ -144,7 +144,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 @@ -294,8 +298,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