From: AN Long Date: Mon, 11 Aug 2025 13:04:47 +0000 (+0900) Subject: gh-115766: Fix IPv4Interface.is_unspecified (GH-137326) X-Git-Tag: v3.15.0a1~722 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=deb0020e3d478fa72104b82e2ba1a1c0c6eb4eae;p=thirdparty%2FPython%2Fcpython.git gh-115766: Fix IPv4Interface.is_unspecified (GH-137326) --- diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 8b60b9d5c9cd..7470dc6c52d3 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1479,6 +1479,10 @@ class IPv4Interface(IPv4Address): return '%s/%s' % (self._string_from_ip_int(self._ip), self.hostmask) + @property + def is_unspecified(self): + return self._ip == 0 and self.network.is_unspecified + class IPv4Network(_BaseV4, _BaseNetwork): diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index db1c38243e22..62929f9dd68b 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -2269,6 +2269,10 @@ class IpaddrUnitTest(unittest.TestCase): self.assertEqual(False, ipaddress.ip_network('240.0.0.0').is_multicast) self.assertEqual(True, ipaddress.ip_network('240.0.0.0').is_reserved) + self.assertTrue(ipaddress.ip_interface('0.0.0.0/32').is_unspecified) + self.assertFalse(ipaddress.ip_interface('0.0.0.0/31').is_unspecified) + self.assertFalse(ipaddress.ip_interface('1.2.3.4/32').is_unspecified) + self.assertEqual(True, ipaddress.ip_interface( '192.168.1.1/17').is_private) self.assertEqual(False, ipaddress.ip_network('192.169.0.0').is_private) diff --git a/Misc/NEWS.d/next/Library/2025-08-03-00-36-57.gh-issue-115766.nJCFkW.rst b/Misc/NEWS.d/next/Library/2025-08-03-00-36-57.gh-issue-115766.nJCFkW.rst new file mode 100644 index 000000000000..d8d2203847ca --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-08-03-00-36-57.gh-issue-115766.nJCFkW.rst @@ -0,0 +1 @@ +Fix :attr:`!ipaddress.IPv4Interface.is_unspecified`.