diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst index d55511611e5..fea172463d4 100644 --- a/Doc/library/ipaddress.rst +++ b/Doc/library/ipaddress.rst @@ -390,11 +390,13 @@ so to avoid duplication they are only documented for :class:`IPv4Network`. .. attribute:: network_address - The broadcast address for the network. + The network address for the network. The network address and the + prefix length together uniquely define a network. .. attribute:: broadcast_address - The broadcast address for the network. + The broadcast address for the network. Packets sent to the broadcast + address should be received by every host on the network. .. attribute:: host mask diff --git a/Lib/gzip.py b/Lib/gzip.py index 5bcfe6123af..b6656a933e8 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -413,8 +413,10 @@ class GzipFile(io.BufferedIOBase): if self.fileobj is None: return b'' try: - # 1024 is the same buffering heuristic used in read() - self._read(max(n, 1024)) + # Ensure that we don't return b"" if we haven't reached EOF. + while self.extrasize == 0: + # 1024 is the same buffering heuristic used in read() + self._read(max(n, 1024)) except EOFError: pass offset = self.offset - self.extrastart diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index dfb59445aed..c9338c55f38 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1330,10 +1330,6 @@ class IPv4Interface(IPv4Address): def __hash__(self): return self._ip ^ self._prefixlen ^ int(self.network.network_address) - @property - def prefixlen(self): - return self._prefixlen - @property def ip(self): return IPv4Address(self._ip) @@ -1708,7 +1704,7 @@ class _BaseV6: hex_str = '%032x' % ip_int parts = [hex_str[x:x+4] for x in range(0, 32, 4)] if isinstance(self, (_BaseNetwork, IPv6Interface)): - return '%s/%d' % (':'.join(parts), self.prefixlen) + return '%s/%d' % (':'.join(parts), self._prefixlen) return ':'.join(parts) @property @@ -1946,10 +1942,6 @@ class IPv6Interface(IPv6Address): def __hash__(self): return self._ip ^ self._prefixlen ^ int(self.network.network_address) - @property - def prefixlen(self): - return self._prefixlen - @property def ip(self): return IPv6Address(self._ip) diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 061c8660732..09b4a5e4387 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -731,8 +731,8 @@ class IpaddrUnitTest(unittest.TestCase): '2001:658:22a:cafe:ffff:ffff:ffff:ffff') def testGetPrefixlen(self): - self.assertEqual(self.ipv4_interface.prefixlen, 24) - self.assertEqual(self.ipv6_interface.prefixlen, 64) + self.assertEqual(self.ipv4_interface.network.prefixlen, 24) + self.assertEqual(self.ipv6_interface.network.prefixlen, 64) def testGetSupernet(self): self.assertEqual(self.ipv4_network.supernet().prefixlen, 23) diff --git a/Misc/NEWS b/Misc/NEWS index 92a4d798c44..53f62a0c71c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -81,8 +81,8 @@ Library constructor, objects in the ipaddress module no longer implement __index__ (they still implement __int__ as appropriate) -- Issue #15546: Fix handling of pathological input data in the read1() method of - the BZ2File, GzipFile and LZMAFile classes. +- Issue #15546: Fix handling of pathological input data in the peek() and + read1() methods of the BZ2File, GzipFile and LZMAFile classes. - Issue #13052: Fix IDLE crashing when replace string in Search/Replace dialog ended with '\'. Patch by Roger Serwy.