diff -r 865cf8eba51a Lib/ipaddress.py --- a/Lib/ipaddress.py Mon Feb 29 11:25:09 2016 +0000 +++ b/Lib/ipaddress.py Tue Mar 01 15:13:16 2016 +0800 @@ -916,7 +916,7 @@ new_prefixlen, self)) start = int(self.network_address) - end = int(self.broadcast_address) + end = int(self.broadcast_address) + 1 step = (int(self.hostmask) + 1) >> prefixlen_diff for new_addr in range(start, end, step): current = self.__class__((new_addr, new_prefixlen)) diff -r 865cf8eba51a Lib/test/test_ipaddress.py --- a/Lib/test/test_ipaddress.py Mon Feb 29 11:25:09 2016 +0000 +++ b/Lib/test/test_ipaddress.py Tue Mar 01 15:13:16 2016 +0800 @@ -1053,10 +1053,15 @@ self.assertEqual(subnets1, subnets2) def testSubnet2(self): - ips = [str(x) for x in self.ipv4_network.subnets(2)] + ips1 = [str(x) for x in self.ipv4_network.subnets(2)] self.assertEqual( - ips, + ips1, ['1.2.3.0/26', '1.2.3.64/26', '1.2.3.128/26', '1.2.3.192/26']) + # issue26457 + ips2 = [str(x) for x in ipaddress.ip_network('192.0.2.0/31').subnets()] + self.assertEqual( + ips2, + ['192.0.2.0/32', '192.0.2.1/32']) ipsv6 = [str(x) for x in self.ipv6_network.subnets(2)] self.assertEqual( @@ -1677,6 +1682,13 @@ self.assertRaises(TypeError, list, addr1.address_exclude(addr4)) self.assertRaises(TypeError, list, addr1.address_exclude(addr5)) self.assertEqual(list(addr1.address_exclude(addr1)), []) + # issue26457 + addr6 = ipaddress.ip_network('192.0.2.0/28') + addr7 = ipaddress.ip_network('192.0.2.1/32') + try: + list(addr6.address_exclude(addr7)) + except ValueError: + self.fail('Unexpected ValueError raised') def testHash(self): self.assertEqual(hash(ipaddress.ip_interface('10.1.1.0/24')),