diff options
-rw-r--r-- | trunk/ipaddr.py | 16 | ||||
-rwxr-xr-x | trunk/ipaddr_test.py | 4 |
2 files changed, 15 insertions, 5 deletions
diff --git a/trunk/ipaddr.py b/trunk/ipaddr.py index 62d49f7..d7eb222 100644 --- a/trunk/ipaddr.py +++ b/trunk/ipaddr.py @@ -1540,13 +1540,17 @@ class _BaseV6(object): if self._is_shorthand_ip(ip_str): new_ip = [] hextet = ip_str.split('::') - sep = len(hextet[0].split(':')) + len(hextet[1].split(':')) - new_ip = hextet[0].split(':') - for _ in xrange(8 - sep): - new_ip.append('0000') - new_ip += hextet[1].split(':') + if len(hextet) > 1: + sep = len(hextet[0].split(':')) + len(hextet[1].split(':')) + new_ip = hextet[0].split(':') + for _ in xrange(8 - sep): + new_ip.append('0000') + new_ip += hextet[1].split(':') + + else: + new_ip = ip_str.split(':') # Now need to make sure every hextet is 4 lower case characters. # If a hextet is < 4 characters, we've got missing leading 0's. ret_ip = [] @@ -1627,6 +1631,8 @@ class _BaseV6(object): """ if ip_str.count('::') == 1: return True + if filter(lambda x: len(x) < 4, ip_str.split(':')): + return True return False @property diff --git a/trunk/ipaddr_test.py b/trunk/ipaddr_test.py index 5ad815c..79c341d 100755 --- a/trunk/ipaddr_test.py +++ b/trunk/ipaddr_test.py @@ -909,10 +909,14 @@ class IpaddrUnitTest(unittest.TestCase): def testExplodeShortHandIpStr(self): addr1 = ipaddr.IPv6Network('2001::1') + addr2 = ipaddr.IPv6Address('2001:0:5ef5:79fd:0:59d:a0e5:ba1') self.assertEqual('2001:0000:0000:0000:0000:0000:0000:0001', addr1._explode_shorthand_ip_string(str(addr1.ip))) self.assertEqual('0000:0000:0000:0000:0000:0000:0000:0001', ipaddr.IPv6Network('::1/128').exploded) + # issue 77 + self.assertEqual('2001:0000:5ef5:79fd:0000:059d:a0e5:0ba1', + addr2.exploded) def testIntRepresentation(self): self.assertEqual(16909060, int(self.ipv4)) |