diff --git a/Milter/config.py b/Milter/config.py index 1f1f4dc..3864bd4 100644 --- a/Milter/config.py +++ b/Milter/config.py @@ -34,7 +34,8 @@ class MilterConfigParser(ConfigParser): if q.startswith('file:'): domain = q[5:].lower() fname = os.path.join(dir,domain) - d[domain] = d.setdefault(domain,[]) + open(fname,'r').read().split() + with open(fname,'r') as fp: + d[domain] = d.setdefault(domain,[]) + fp.read().split() else: user,domain = q.split('@') d.setdefault(domain.lower(),[]).append(user) @@ -52,8 +53,9 @@ class MilterConfigParser(ConfigParser): addr = addr.strip() if addr.startswith('file:'): fname = os.path.join(dir,addr[5:]) - for a in open(fname,'r').read().split(): - d[a] = q + with open(fname,'r') as fp: + for a in fp.read().split(): + d[a] = q else: d[addr] = q return d diff --git a/Milter/test.py b/Milter/test.py index 02e01f4..6bb1445 100644 --- a/Milter/test.py +++ b/Milter/test.py @@ -64,7 +64,7 @@ class TestBase(object): def getsymval(self,name): stage = self._stage - if stage >= 0: + if stage is not None and stage >= 0: syms = self._symlist[stage] if syms is not None and name not in syms: return None diff --git a/Milter/utils.py b/Milter/utils.py index 85fd635..bd430c4 100644 --- a/Milter/utils.py +++ b/Milter/utils.py @@ -216,7 +216,8 @@ def parse_header(val): u.append(s.decode()) else: u.append(s.decode()) - u = u''.join(u) + u = ''.join(u) + if type(u) is str: return u for enc in ('us-ascii','iso-8859-1','utf-8'): try: return u.encode(enc) diff --git a/mime.py b/mime.py index f0e781c..7a19059 100644 --- a/mime.py +++ b/mime.py @@ -108,10 +108,11 @@ import email from email.message import Message try: from email.generator import BytesGenerator - from email import message_from_binary_file + from email import message_from_binary_file, encoders except: from email.generator import Generator as BytesGenerator from email import message_from_file as message_from_binary_file + from email import Encoders as encoders from email.utils import quote if not getattr(Message,'as_bytes',None): @@ -534,7 +535,7 @@ def check_html(msg,savname=None): if htmlfilter.modified: msg.set_payload(out) # remove embedded scripts del msg["content-transfer-encoding"] - email.Encoders.encode_quopri(msg) + encoders.encode_quopri(msg) return Milter.CONTINUE if __name__ == '__main__': diff --git a/testutils.py b/testutils.py index 01887f7..56ec161 100644 --- a/testutils.py +++ b/testutils.py @@ -43,7 +43,10 @@ class AddrCacheTestCase(unittest.TestCase): def testParseHeader(self): s='=?UTF-8?B?TGFzdCBGZXcgQ29sZHBsYXkgQWxidW0gQXJ0d29ya3MgQXZhaWxhYmxlAA?=' h = Milter.utils.parse_header(s) - self.assertEqual(h,b'Last Few Coldplay Album Artworks Available\x00') + self.assertEqual(h,'Last Few Coldplay Album Artworks Available\x00') + s='=?iso-8859-1?Q?Peter_=D8rum?= ' + h = Milter.utils.parse_header(s) + self.assertEqual(h,'Peter \xd8rum ') @unittest.expectedFailure def testParseAddress(self):