diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 20f33cbdeb67d0..12b114bbe54a25 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1371,12 +1371,12 @@ def __init__(self, address): if isinstance(address, tuple): IPv4Address.__init__(self, address[0]) if len(address) > 1: - self._prefixlen = int(address[1]) + arg = address[1] else: - self._prefixlen = self._max_prefixlen + arg = self._max_prefixlen self.network = IPv4Network(address, strict=False) - self.netmask = self.network.netmask + self.netmask, self._prefixlen = self._make_netmask(arg) self.hostmask = self.network.hostmask return @@ -2064,11 +2064,11 @@ def __init__(self, address): if isinstance(address, tuple): IPv6Address.__init__(self, address[0]) if len(address) > 1: - self._prefixlen = int(address[1]) + arg = address[1] else: - self._prefixlen = self._max_prefixlen + arg = self._max_prefixlen self.network = IPv6Network(address, strict=False) - self.netmask = self.network.netmask + self.netmask, self._prefixlen = self._make_netmask(arg) self.hostmask = self.network.hostmask return diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 0e39516dc033e3..4be9f0a79a9aef 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -424,6 +424,10 @@ def assertBadAddress(addr, details): assertBadAddress("1.2.3.256", re.escape("256 (> 255)")) def test_valid_netmask(self): + self.assertEqual(str(self.factory(('192.0.2.0', 24))), '192.0.2.0/24') + self.assertEqual(str(self.factory(('192.0.2.0', '24'))), '192.0.2.0/24') + self.assertEqual(str(self.factory(('192.0.2.0', '255.255.255.0'))), + '192.0.2.0/24') self.assertEqual(str(self.factory('192.0.2.0/255.255.255.0')), '192.0.2.0/24') for i in range(0, 33): @@ -501,6 +505,10 @@ def assertBadAddress(addr, details): def test_valid_netmask(self): # We only support CIDR for IPv6, because expanded netmasks are not # standard notation. + self.assertEqual(str(self.factory(('dead:beaf::', 32))), + 'dead:beaf::/32') + self.assertEqual(str(self.factory(('dead:beaf::', '32'))), + 'dead:beaf::/32') self.assertEqual(str(self.factory('2001:db8::/32')), '2001:db8::/32') for i in range(0, 129): # Generate and re-parse the CIDR format (trivial).