bpo-27683: Fix a regression for host() of ipaddress network objects (… · python/cpython@ae2feb3 (original) (raw)
`@@ -1498,45 +1498,28 @@ def init(self, address, strict=True):
`
1498
1498
``
1499
1499
`# Constructing from a packed address or integer
`
1500
1500
`if isinstance(address, (int, bytes)):
`
1501
``
`-
self.network_address = IPv4Address(address)
`
1502
``
`-
self.netmask, self._prefixlen = self._make_netmask(self._max_prefixlen)
`
1503
``
`-
#fixme: address/network test here.
`
1504
``
`-
return
`
1505
``
-
1506
``
`-
if isinstance(address, tuple):
`
1507
``
`-
if len(address) > 1:
`
1508
``
`-
arg = address[1]
`
1509
``
`-
else:
`
1510
``
`-
We weren't given an address[1]
`
1511
``
`-
arg = self._max_prefixlen
`
1512
``
`-
self.network_address = IPv4Address(address[0])
`
1513
``
`-
self.netmask, self._prefixlen = self._make_netmask(arg)
`
1514
``
`-
packed = int(self.network_address)
`
1515
``
`-
if packed & int(self.netmask) != packed:
`
1516
``
`-
if strict:
`
1517
``
`-
raise ValueError('%s has host bits set' % self)
`
1518
``
`-
else:
`
1519
``
`-
self.network_address = IPv4Address(packed &
`
1520
``
`-
int(self.netmask))
`
1521
``
`-
return
`
1522
``
-
``
1501
`+
addr = address
`
``
1502
`+
mask = self._max_prefixlen
`
``
1503
`+
Constructing from a tuple (addr, [mask])
`
``
1504
`+
elif isinstance(address, tuple):
`
``
1505
`+
addr = address[0]
`
``
1506
`+
mask = address[1] if len(address) > 1 else self._max_prefixlen
`
1523
1507
`# Assume input argument to be string or any object representation
`
1524
1508
`# which converts into a formatted IP prefix string.
`
1525
``
`-
addr = _split_optional_netmask(address)
`
1526
``
`-
self.network_address = IPv4Address(self._ip_int_from_string(addr[0]))
`
1527
``
-
1528
``
`-
if len(addr) == 2:
`
1529
``
`-
arg = addr[1]
`
1530
1509
`else:
`
1531
``
`-
arg = self._max_prefixlen
`
1532
``
`-
self.netmask, self._prefixlen = self._make_netmask(arg)
`
1533
``
-
1534
``
`-
if strict:
`
1535
``
`-
if (IPv4Address(int(self.network_address) & int(self.netmask)) !=
`
1536
``
`-
self.network_address):
`
``
1510
`+
args = _split_optional_netmask(address)
`
``
1511
`+
addr = self._ip_int_from_string(args[0])
`
``
1512
`+
mask = args[1] if len(args) == 2 else self._max_prefixlen
`
``
1513
+
``
1514
`+
self.network_address = IPv4Address(addr)
`
``
1515
`+
self.netmask, self._prefixlen = self._make_netmask(mask)
`
``
1516
`+
packed = int(self.network_address)
`
``
1517
`+
if packed & int(self.netmask) != packed:
`
``
1518
`+
if strict:
`
1537
1519
`raise ValueError('%s has host bits set' % self)
`
1538
``
`-
self.network_address = IPv4Address(int(self.network_address) &
`
1539
``
`-
int(self.netmask))
`
``
1520
`+
else:
`
``
1521
`+
self.network_address = IPv4Address(packed &
`
``
1522
`+
int(self.netmask))
`
1540
1523
``
1541
1524
`if self._prefixlen == (self._max_prefixlen - 1):
`
1542
1525
`self.hosts = self.iter
`
`@@ -2191,46 +2174,30 @@ def init(self, address, strict=True):
`
2191
2174
` """
`
2192
2175
`_BaseNetwork.init(self, address)
`
2193
2176
``
2194
``
`-
Efficient constructor from integer or packed address
`
2195
``
`-
if isinstance(address, (bytes, int)):
`
2196
``
`-
self.network_address = IPv6Address(address)
`
2197
``
`-
self.netmask, self._prefixlen = self._make_netmask(self._max_prefixlen)
`
2198
``
`-
return
`
2199
``
-
2200
``
`-
if isinstance(address, tuple):
`
2201
``
`-
if len(address) > 1:
`
2202
``
`-
arg = address[1]
`
2203
``
`-
else:
`
2204
``
`-
arg = self._max_prefixlen
`
2205
``
`-
self.netmask, self._prefixlen = self._make_netmask(arg)
`
2206
``
`-
self.network_address = IPv6Address(address[0])
`
2207
``
`-
packed = int(self.network_address)
`
2208
``
`-
if packed & int(self.netmask) != packed:
`
2209
``
`-
if strict:
`
2210
``
`-
raise ValueError('%s has host bits set' % self)
`
2211
``
`-
else:
`
2212
``
`-
self.network_address = IPv6Address(packed &
`
2213
``
`-
int(self.netmask))
`
2214
``
`-
return
`
2215
``
-
``
2177
`+
Constructing from a packed address or integer
`
``
2178
`+
if isinstance(address, (int, bytes)):
`
``
2179
`+
addr = address
`
``
2180
`+
mask = self._max_prefixlen
`
``
2181
`+
Constructing from a tuple (addr, [mask])
`
``
2182
`+
elif isinstance(address, tuple):
`
``
2183
`+
addr = address[0]
`
``
2184
`+
mask = address[1] if len(address) > 1 else self._max_prefixlen
`
2216
2185
`# Assume input argument to be string or any object representation
`
2217
2186
`# which converts into a formatted IP prefix string.
`
2218
``
`-
addr = _split_optional_netmask(address)
`
2219
``
-
2220
``
`-
self.network_address = IPv6Address(self._ip_int_from_string(addr[0]))
`
2221
``
-
2222
``
`-
if len(addr) == 2:
`
2223
``
`-
arg = addr[1]
`
2224
2187
`else:
`
2225
``
`-
arg = self._max_prefixlen
`
2226
``
`-
self.netmask, self._prefixlen = self._make_netmask(arg)
`
2227
``
-
2228
``
`-
if strict:
`
2229
``
`-
if (IPv6Address(int(self.network_address) & int(self.netmask)) !=
`
2230
``
`-
self.network_address):
`
``
2188
`+
args = _split_optional_netmask(address)
`
``
2189
`+
addr = self._ip_int_from_string(args[0])
`
``
2190
`+
mask = args[1] if len(args) == 2 else self._max_prefixlen
`
``
2191
+
``
2192
`+
self.network_address = IPv6Address(addr)
`
``
2193
`+
self.netmask, self._prefixlen = self._make_netmask(mask)
`
``
2194
`+
packed = int(self.network_address)
`
``
2195
`+
if packed & int(self.netmask) != packed:
`
``
2196
`+
if strict:
`
2231
2197
`raise ValueError('%s has host bits set' % self)
`
2232
``
`-
self.network_address = IPv6Address(int(self.network_address) &
`
2233
``
`-
int(self.netmask))
`
``
2198
`+
else:
`
``
2199
`+
self.network_address = IPv6Address(packed &
`
``
2200
`+
int(self.netmask))
`
2234
2201
``
2235
2202
`if self._prefixlen == (self._max_prefixlen - 1):
`
2236
2203
`self.hosts = self.iter
`