From 652b43f0fd98da956b139165669da714e53dcbd7 Mon Sep 17 00:00:00 2001 From: Pete Wicken Date: Sun, 2 Oct 2022 13:34:22 +0100 Subject: [PATCH 1/6] gh-82836: fix private network check Fixes private checks for network objects. The previous method would incorrectly return True for a private check in cases such as "0.0.0.0/0". --- Lib/ipaddress.py | 16 ++++++++++++++-- Lib/test/test_ipaddress.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 3f15601e700d68..c053f29f03f202 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1084,8 +1084,9 @@ def is_private(self): iana-ipv4-special-registry or iana-ipv6-special-registry. """ - return (self.network_address.is_private and - self.broadcast_address.is_private) + return any(self.network_address in priv_network and + self.broadcast_address in priv_network + for priv_network in self._constants._private_networks) @property def is_global(self): @@ -1122,6 +1123,15 @@ def is_loopback(self): return (self.network_address.is_loopback and self.broadcast_address.is_loopback) + +class _BaseConstants: + + _private_networks = [] + + +_BaseNetwork._constants = _BaseConstants + + class _BaseV4: """Base IPv4 object. @@ -1561,6 +1571,7 @@ class _IPv4Constants: IPv4Address._constants = _IPv4Constants +IPv4Network._constants = _IPv4Constants class _BaseV6: @@ -2285,3 +2296,4 @@ class _IPv6Constants: IPv6Address._constants = _IPv6Constants +IPv6Network._constants = _IPv6Constants diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 5c656c49e2e75f..c75df6cacaf3f1 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -2277,6 +2277,39 @@ def testReservedIpv4(self): self.assertEqual(False, ipaddress.ip_address('128.0.0.0').is_loopback) self.assertEqual(True, ipaddress.ip_network('0.0.0.0').is_unspecified) + def testPrivateNetworks(self): + self.assertEqual(False, ipaddress.ip_network("0.0.0.0/0").is_private) + self.assertEqual(False, ipaddress.ip_network("1.0.0.0/0").is_private) + + self.assertEqual(True, ipaddress.ip_network("0.0.0.0/8").is_private) + self.assertEqual(True, ipaddress.ip_network("10.0.0.0/8").is_private) + self.assertEqual(True, ipaddress.ip_network("127.0.0.0/8").is_private) + self.assertEqual(True, ipaddress.ip_network("169.254.0.0/16").is_private) + self.assertEqual(True, ipaddress.ip_network("172.16.0.0/12").is_private) + self.assertEqual(True, ipaddress.ip_network("192.0.0.0/29").is_private) + self.assertEqual(True, ipaddress.ip_network("192.0.0.170/31").is_private) + self.assertEqual(True, ipaddress.ip_network("192.0.2.0/24").is_private) + self.assertEqual(True, ipaddress.ip_network("192.168.0.0/16").is_private) + self.assertEqual(True, ipaddress.ip_network("198.18.0.0/15").is_private) + self.assertEqual(True, ipaddress.ip_network("198.51.100.0/24").is_private) + self.assertEqual(True, ipaddress.ip_network("203.0.113.0/24").is_private) + self.assertEqual(True, ipaddress.ip_network("240.0.0.0/4").is_private) + self.assertEqual(True, ipaddress.ip_network("255.255.255.255/32").is_private) + + self.assertEqual(False, ipaddress.ip_network("::/0").is_private) + self.assertEqual(False, ipaddress.ip_network("::ff/128").is_private) + + self.assertEqual(True, ipaddress.ip_network("::1/128").is_private) + self.assertEqual(True, ipaddress.ip_network("::/128").is_private) + self.assertEqual(True, ipaddress.ip_network("::ffff:0:0/96").is_private) + self.assertEqual(True, ipaddress.ip_network("100::/64").is_private) + self.assertEqual(True, ipaddress.ip_network("2001::/23").is_private) + self.assertEqual(True, ipaddress.ip_network("2001:2::/48").is_private) + self.assertEqual(True, ipaddress.ip_network("2001:db8::/32").is_private) + self.assertEqual(True, ipaddress.ip_network("2001:10::/28").is_private) + self.assertEqual(True, ipaddress.ip_network("fc00::/7").is_private) + self.assertEqual(True, ipaddress.ip_network("fe80::/10").is_private) + def testReservedIpv6(self): self.assertEqual(True, ipaddress.ip_network('ffff::').is_multicast) From b8164c468d2398df9d273260e14f115a0c373bd4 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Sun, 2 Oct 2022 12:38:26 +0000 Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst diff --git a/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst b/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst new file mode 100644 index 00000000000000..b9d24fc1f58e03 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst @@ -0,0 +1 @@ +Fix implemented for Lib/ipaddress.py `is_private` network checks. Previously non-private networks (0.0.0.0/0) would return True from this method; now it correctly returns False. From 3042e65ddb77b16d477d5fdd7927dc150f6414f7 Mon Sep 17 00:00:00 2001 From: Pete Wicken Date: Sun, 2 Oct 2022 13:40:49 +0100 Subject: [PATCH 3/6] Fix NEWS --- .../next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst b/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst index b9d24fc1f58e03..2ada99e86fe329 100644 --- a/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst +++ b/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst @@ -1 +1 @@ -Fix implemented for Lib/ipaddress.py `is_private` network checks. Previously non-private networks (0.0.0.0/0) would return True from this method; now it correctly returns False. +Fix implemented for Lib/ipaddress.py ``is_private`` network checks. Previously non-private networks (0.0.0.0/0) would return True from this method; now it correctly returns False. From e218eef4dceadf7363ec5c91b54e18ea999ff8ea Mon Sep 17 00:00:00 2001 From: Pete Wicken Date: Sun, 2 Oct 2022 13:49:02 +0100 Subject: [PATCH 4/6] Fix typo in test --- Lib/test/test_ipaddress.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index c75df6cacaf3f1..a5388b2e5debd8 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -2279,7 +2279,7 @@ def testReservedIpv4(self): def testPrivateNetworks(self): self.assertEqual(False, ipaddress.ip_network("0.0.0.0/0").is_private) - self.assertEqual(False, ipaddress.ip_network("1.0.0.0/0").is_private) + self.assertEqual(False, ipaddress.ip_network("1.0.0.0/8").is_private) self.assertEqual(True, ipaddress.ip_network("0.0.0.0/8").is_private) self.assertEqual(True, ipaddress.ip_network("10.0.0.0/8").is_private) From c814b419138ff4495d83a203919de5bfa8afbeaa Mon Sep 17 00:00:00 2001 From: Pete Wicken Date: Sun, 2 Oct 2022 13:52:42 +0100 Subject: [PATCH 5/6] Improve docstring for is_private --- Lib/ipaddress.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index c053f29f03f202..1cb71d8032e173 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1077,10 +1077,10 @@ def is_link_local(self): @property def is_private(self): - """Test if this address is allocated for private networks. + """Test if this network belongs to a private range. Returns: - A boolean, True if the address is reserved per + A boolean, True if the network is reserved per iana-ipv4-special-registry or iana-ipv6-special-registry. """ From 406a7bc04e661b4fba212a77065e6037a941d043 Mon Sep 17 00:00:00 2001 From: Pete Wicken <2273100+JamoBox@users.noreply.github.com> Date: Tue, 4 Oct 2022 22:05:56 +0100 Subject: [PATCH 6/6] Update Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst Co-authored-by: Jelle Zijlstra --- .../next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst b/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst index 2ada99e86fe329..dcbea66d66bf7c 100644 --- a/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst +++ b/Misc/NEWS.d/next/Library/2022-10-02-12-38-22.gh-issue-82836.OvYLmC.rst @@ -1 +1 @@ -Fix implemented for Lib/ipaddress.py ``is_private`` network checks. Previously non-private networks (0.0.0.0/0) would return True from this method; now it correctly returns False. +Fix :attr:`~ipaddress.IPv4Address.is_private` properties in the :mod:`ipaddress` module. Previously non-private networks (0.0.0.0/0) would return True from this method; now they correctly return False. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy