Issue 14814: Eliminate bytes warnings from ipaddress by correctly throwing an exception early when given bytes data of the wrong length. Also removes 2.x backwards compatibility code from associated tests.
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index 352c9b8..9a1ba72 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -1250,7 +1250,9 @@
return
# Constructing from a packed address
- if isinstance(address, bytes) and len(address) == 4:
+ if isinstance(address, bytes):
+ if len(address) != 4:
+ raise AddressValueError(address)
self._ip = struct.unpack('!I', address)[0]
return
@@ -1379,7 +1381,9 @@
_BaseNetwork.__init__(self, address)
# Constructing from a packed address
- if isinstance(address, bytes) and len(address) == 4:
+ if isinstance(address, bytes):
+ if len(address) != 4:
+ raise AddressValueError(address)
self.network_address = IPv4Address(
struct.unpack('!I', address)[0])
self._prefixlen = self._max_prefixlen
@@ -1864,7 +1868,9 @@
return
# Constructing from a packed address
- if isinstance(address, bytes) and len(address) == 16:
+ if isinstance(address, bytes):
+ if len(address) != 16:
+ raise AddressValueError(address)
tmp = struct.unpack('!QQ', address)
self._ip = (tmp[0] << 64) | tmp[1]
return
@@ -1996,7 +2002,9 @@
return
# Constructing from a packed address
- if isinstance(address, bytes) and len(address) == 16:
+ if isinstance(address, bytes):
+ if len(address) != 16:
+ raise AddressValueError(address)
tmp = struct.unpack('!QQ', address)
self.network_address = IPv6Address((tmp[0] << 64) | tmp[1])
self._prefixlen = self._max_prefixlen