]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-115766: Fix IPv4Interface.is_unspecified (GH-137326)
authorAN Long <aisk@users.noreply.github.com>
Mon, 11 Aug 2025 13:04:47 +0000 (22:04 +0900)
committerGitHub <noreply@github.com>
Mon, 11 Aug 2025 13:04:47 +0000 (15:04 +0200)
Lib/ipaddress.py
Lib/test/test_ipaddress.py
Misc/NEWS.d/next/Library/2025-08-03-00-36-57.gh-issue-115766.nJCFkW.rst [new file with mode: 0644]

index 8b60b9d5c9cd51f200b508564d20a85f1a3fd55c..7470dc6c52d3a8ba2cfb60ee2045dfc8d4dc9178 100644 (file)
@@ -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):
 
index db1c38243e226809d5aada35eba63a2534fd88f0..62929f9dd68b5afefd00b7b042f88c1cf867b53e 100644 (file)
@@ -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 (file)
index 0000000..d8d2203
--- /dev/null
@@ -0,0 +1 @@
+Fix :attr:`!ipaddress.IPv4Interface.is_unspecified`.