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

`