From f9a347ecec30c16cd96c7bbd132a2857a706cf09 Mon Sep 17 00:00:00 2001 From: sudeep Date: Sat, 8 Aug 2026 11:35:26 +0530 Subject: [PATCH 1/2] gh-155140: Fix IPv6Address.is_link_local to require the strict fe80::/64 range --- Lib/ipaddress.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 9c7a0a46f4f0e1f..c13355b9199d3e1 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -2410,7 +2410,7 @@ def is_site_local(self): class _IPv6Constants: - _linklocal_network = IPv6Network('fe80::/10') + _linklocal_network = IPv6Network('fe80::/64') _multicast_network = IPv6Network('ff00::/8') From 6b3e39d0614c25a0467a965b7fd06a350e08f904 Mon Sep 17 00:00:00 2001 From: sudeep Date: Sat, 8 Aug 2026 13:23:21 +0530 Subject: [PATCH 2/2] Update link-local address assertions in tests --- Lib/test/test_ipaddress.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index a74b692784eb594..49a35d0bbf51d07 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -2472,12 +2472,13 @@ def testReservedIpv6(self): self.assertEqual(False, ipaddress.ip_network('fbff:ffff::').is_private) self.assertEqual(False, ipaddress.ip_network('fe00::').is_private) - self.assertEqual(True, ipaddress.ip_network('fea0::').is_link_local) - self.assertEqual(True, ipaddress.ip_network( - 'febf:ffff::').is_link_local) + self.assertEqual(False, ipaddress.ip_network('fea0::').is_link_local) + self.assertEqual(False, ipaddress.ip_network('febf:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_network( 'fe7f:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_network('fec0::').is_link_local) + self.assertEqual(True, ipaddress.ip_network('fe80::').is_link_local) + self.assertEqual(False, ipaddress.ip_network('fe80:6666:6666:6666:6666:6666:6666:6666').is_link_local) self.assertEqual(True, ipaddress.ip_interface('0:0::0:01').is_loopback) self.assertEqual(False, ipaddress.ip_interface('::1/127').is_loopback) @@ -2511,12 +2512,13 @@ def testReservedIpv6(self): self.assertEqual(False, ipaddress.ip_address('fbff:ffff::').is_private) self.assertEqual(False, ipaddress.ip_address('fe00::').is_private) - self.assertEqual(True, ipaddress.ip_address('fea0::').is_link_local) - self.assertEqual(True, ipaddress.ip_address( - 'febf:ffff::').is_link_local) + self.assertEqual(False, ipaddress.ip_address('fea0::').is_link_local) + self.assertEqual(False, ipaddress.ip_address('febf:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_address( 'fe7f:ffff::').is_link_local) self.assertEqual(False, ipaddress.ip_address('fec0::').is_link_local) + self.assertEqual(True, ipaddress.ip_address('fe80::').is_link_local) + self.assertEqual(False, ipaddress.ip_address('fe80:6666:6666:6666:6666:6666:6666:6666').is_link_local) self.assertEqual(True, ipaddress.ip_address('0:0::0:01').is_loopback) self.assertEqual(True, ipaddress.ip_address('::1').is_loopback)