From 44d892406060673d32c2e3723ea332a594927cb4 Mon Sep 17 00:00:00 2001 From: Scott Kitterman Date: Sun, 9 Aug 2020 13:50:40 -0400 Subject: [PATCH] WIP for invalid UTF-8 resilience --- CHANGES | 2 +- dkimpy_milter/__init__.py | 6 ++++-- setup.py | 2 +- tests/02_sign_message.miltertest | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 57a3ac6..354775f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -1.2.2 +1.3.0 WARNING LAST COMMIT IS WIP - Improve resilience to malformed email addresses - Improve README.md formating for markdown display on pypi - Improve documentation in dkimpy-milter.conf (5) and README.md for signing diff --git a/dkimpy_milter/__init__.py b/dkimpy_milter/__init__.py index a0db433..facae23 100644 --- a/dkimpy_milter/__init__.py +++ b/dkimpy_milter/__init__.py @@ -107,9 +107,11 @@ class dkimMilter(Milter.Base): # envfrom (MAIL FROM in the SMTP protocol) seems to mark the start # of each message. @Milter.noreply - def envfrom(self, f, *str): + def envfrom(self, f, *moredata): + f = str(codecs.encode(f, 'UTF-8', 'replace'), 'UTF-8', 'ignore') + moredata = str(codecs.encode(str(moredata), 'UTF-8', 'replace'), 'UTF-8', 'ignore') if self.conf.get('Syslog') and self.conf.get('debugLevel') >= 2: - syslog.syslog("mail from: {0} {1}".format(f, str)) + syslog.syslog("mail from: {0} {1}".format(f, moredata)) self.fp = io.BytesIO() self.mailfrom = f t = parse_addr(f) diff --git a/setup.py b/setup.py index 07039f7..c661a91 100644 --- a/setup.py +++ b/setup.py @@ -89,7 +89,7 @@ except ImportError: # If PyDNS is not installed, prefer dnspython setup( name='dkimpy-milter', - version='1.2.1', + version='1.3.0', author='Scott Kitterman', author_email='scott@kitterman.com', url='https://launchpad.net/dkimpy-milter', diff --git a/tests/02_sign_message.miltertest b/tests/02_sign_message.miltertest index 77907ba..1596240 100644 --- a/tests/02_sign_message.miltertest +++ b/tests/02_sign_message.miltertest @@ -26,7 +26,7 @@ function connect_and_send (sockname, headers, body) end -- mt.macro(conn, SMFIC_MAIL, "i", "simple-message") - if mt.mailfrom(conn, "") ~= nil then + if mt.mailfrom(conn, " (Alicþþÿÿe)") ~= nil then error "mt.mailfrom() failed" end if mt.getreply(conn) ~= SMFIR_CONTINUE then