From: Bob Halley Date: Mon, 26 Dec 2016 20:31:53 +0000 (-0800) Subject: dns.inet.is_multicast() was broken in python 3 by X-Git-Tag: v1.16.0~113 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e036fa3d070eafda207a7d7f4cca2913468978b3;p=thirdparty%2Fdnspython.git dns.inet.is_multicast() was broken in python 3 by the python2-python3 merge. [#224] --- diff --git a/dns/_compat.py b/dns/_compat.py index e78b2883..5c9f15e4 100644 --- a/dns/_compat.py +++ b/dns/_compat.py @@ -21,6 +21,8 @@ if sys.version_info > (3,): return x.encode() def maybe_chr(x): return x + def maybe_ord(x): + return x else: text_type = unicode # pylint: disable=unicode-builtin, undefined-variable binary_type = str @@ -34,6 +36,8 @@ else: return x def maybe_chr(x): return chr(x) + def maybe_ord(x): + return ord(x) def round_py2_compat(what): diff --git a/dns/inet.py b/dns/inet.py index 73490a9d..a8ff38da 100644 --- a/dns/inet.py +++ b/dns/inet.py @@ -20,6 +20,7 @@ import socket import dns.ipv4 import dns.ipv6 +from ._compat import maybe_ord # We assume that AF_INET is always defined. @@ -101,11 +102,11 @@ def is_multicast(text): @rtype: bool """ try: - first = ord(dns.ipv4.inet_aton(text)[0]) + first = maybe_ord(dns.ipv4.inet_aton(text)[0]) return first >= 224 and first <= 239 except Exception: try: - first = ord(dns.ipv6.inet_aton(text)[0]) + first = maybe_ord(dns.ipv6.inet_aton(text)[0]) return first == 255 except Exception: raise ValueError diff --git a/tests/test_ntoaaton.py b/tests/test_ntoaaton.py index d6e8bedf..05fb95a8 100644 --- a/tests/test_ntoaaton.py +++ b/tests/test_ntoaaton.py @@ -24,6 +24,7 @@ import binascii import dns.exception import dns.ipv4 import dns.ipv6 +import dns.inet # for convenience aton4 = dns.ipv4.inet_aton @@ -214,5 +215,19 @@ class NtoAAtoNTestCase(unittest.TestCase): self.failUnless(dns.ipv6.is_mapped(aton6(t2))) self.failIf(dns.ipv6.is_mapped(aton6(t3))) + def test_is_multicast(self): + t1 = '223.0.0.1' + t2 = '240.0.0.1' + t3 = '224.0.0.1' + t4 = '239.0.0.1' + t5 = 'fe00::1' + t6 = 'ff00::1' + self.failIf(dns.inet.is_multicast(t1)) + self.failIf(dns.inet.is_multicast(t2)) + self.failUnless(dns.inet.is_multicast(t3)) + self.failUnless(dns.inet.is_multicast(t4)) + self.failIf(dns.inet.is_multicast(t5)) + self.failUnless(dns.inet.is_multicast(t6)) + if __name__ == '__main__': unittest.main()