Catch more ascii encoding errors to improve resilience against bad data

(LP: #1844189)
This commit is contained in:
Scott Kitterman committed 2019-09-23 10:48:04 -04:00
1 parent 6910ff1f9a
commit be92e5c5b1
2 files changed
+14 -3

No files matched your search

+12 -3
View File
@@ -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