Don't crash when asked to verify a badly encoded domain or selector.

This commit is contained in:
William Grant
2011-06-02 23:07:01 +10:00
parent 30bf1bc171
commit f4875a8768
2 changed files with 12 additions and 3 deletions
+3
View File
@@ -430,8 +430,11 @@ def verify(message, logger=None, dnsfunc=dnstxt):
return False
# dnstxt wants Unicode
try:
selector = sig[b's'].decode('ascii')
domain = sig[b'd'].decode('ascii')
except UnicodeDecodeError:
return False
name = "%s._domainkey.%s." % (selector, domain)
s = dnsfunc(name).encode('utf-8')
if not s:
+7 -1
View File
@@ -42,7 +42,7 @@ class TestFold(unittest.TestCase):
# The function is terribly broken, not passing even this simple
# test.
self.assertEqual(
b"foo"*24 + b"\r\n foo", dkim.fold(b"foo" * 25))
b"foo" * 24 + b"\r\n foo", dkim.fold(b"foo" * 25))
class TestSignAndVerify(unittest.TestCase):
@@ -68,6 +68,12 @@ class TestSignAndVerify(unittest.TestCase):
res = dkim.verify(sig + self.message + b"foo", dnsfunc=self.dnsfunc)
self.assertFalse(res)
def test_badly_encoded_domain_fails(self):
# Domains should be ASCII. Bad ASCII causes verification to fail.
sig = dkim.sign(self.message, b"test", b"example.com\xe9", self.key)
res = dkim.verify(sig + self.message, dnsfunc=self.dnsfunc)
self.assertFalse(res)
def test_suite():
from unittest import TestLoader