]> granicus.if.org Git - python/commitdiff
Fix an off by one error on negative indexs to __getitem__
authorGregory P. Smith <greg@mad-scientist.com>
Fri, 8 May 2009 23:16:47 +0000 (23:16 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Fri, 8 May 2009 23:16:47 +0000 (23:16 +0000)
http://code.google.com/p/ipaddr-py/issues/detail?id=15

Lib/ipaddr.py
Lib/test/test_ipaddr.py

index b5518edb0468ce51d19e63dbefa5d3c2a561b264..7289e456e43964901e059e445d8fd4db456c8eea 100644 (file)
@@ -209,6 +209,7 @@ class BaseIP(object):
                 raise IndexError
             return self._string_from_ip_int(self.network + n)
         else:
+            n += 1
             if self.broadcast + n < self.network:
                 raise IndexError
             return self._string_from_ip_int(self.broadcast + n)
index 98553269bf4ec841a48a50f5e200da6681249f11..46b9cab6a984f52ab07ef1c65f68439108e76e9a 100755 (executable)
@@ -254,6 +254,17 @@ class IpaddrUnitTest(unittest.TestCase):
         self.assertEqual(self.ipv6[5],
                          '2001:658:22a:cafe::5')
 
+    def test_getitem(self):
+        # http://code.google.com/p/ipaddr-py/issues/detail?id=15
+        addr = ipaddr.IPv4('172.31.255.128/255.255.255.240')
+        self.assertEqual(28, addr.prefixlen)
+        addr_list = list(addr)
+        self.assertEqual('172.31.255.128', addr_list[0])
+        self.assertEqual('172.31.255.128', addr[0])
+        self.assertEqual('172.31.255.143', addr_list[-1])
+        self.assertEqual('172.31.255.143', addr[-1])
+        self.assertEqual(addr_list[-1], addr[-1])
+
     def test_equals(self):
         self.assertTrue(self.ipv4 == ipaddr.IPv4('1.2.3.4/24'))
         self.assertFalse(self.ipv4 == ipaddr.IPv4('1.2.3.4/23'))