summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/ipaddr.py28
-rwxr-xr-xLib/test/test_ipaddr.py42
-rw-r--r--Lib/zipfile.py4
3 files changed, 10 insertions, 64 deletions
diff --git a/Lib/ipaddr.py b/Lib/ipaddr.py
index c95a814..d6ea310 100644
--- a/Lib/ipaddr.py
+++ b/Lib/ipaddr.py
@@ -193,17 +193,6 @@ def collapse_address_list(addresses):
sorted(addresses, key=BaseIP._get_networks_key))
-# Test whether this Python implementation supports byte objects that
-# are not identical to str ones.
-# We need to exclude platforms where bytes == str so that we can
-# distinguish between packed representations and strings, for example
-# b'12::' (the IPv4 address 49.50.58.58) and '12::' (an IPv6 address).
-try:
- _compat_has_real_bytes = bytes != str
-except NameError: # <Python2.6
- _compat_has_real_bytes = False
-
-
class BaseIP(object):
"""A generic IP object.
@@ -591,14 +580,6 @@ class IPv4(BaseIP):
raise IPv4IpValidationError(ipaddr)
return
- # Constructing from a packed address
- if _compat_has_real_bytes:
- if isinstance(ipaddr, bytes) and len(ipaddr) == 4:
- self.ip = struct.unpack('!I', ipaddr)[0]
- self._prefixlen = 32
- self.netmask = self._ALL_ONES
- return
-
# Assume input argument to be string or any object representation
# which converts into a formatted IP prefix string.
addr = str(ipaddr).split('/')
@@ -930,15 +911,6 @@ class IPv6(BaseIP):
raise IPv6IpValidationError(ipaddr)
return
- # Constructing from a packed address
- if _compat_has_real_bytes:
- if isinstance(ipaddr, bytes) and len(ipaddr) == 16:
- tmp = struct.unpack('!QQ', ipaddr)
- self.ip = (tmp[0] << 64) | tmp[1]
- self._prefixlen = 128
- self.netmask = self._ALL_ONES
- return
-
# Assume input argument to be string or any object representation
# which converts into a formatted IP prefix string.
addr_str = str(ipaddr)
diff --git a/Lib/test/test_ipaddr.py b/Lib/test/test_ipaddr.py
index 16ebb86..6ab581c 100755
--- a/Lib/test/test_ipaddr.py
+++ b/Lib/test/test_ipaddr.py
@@ -22,12 +22,6 @@ import unittest
import ipaddr
-# Compatibility function to cast str to bytes objects
-if ipaddr._compat_has_real_bytes:
- _cb = lambda bytestr: bytes(bytestr, 'charmap')
-else:
- _cb = str
-
class IpaddrUnitTest(unittest.TestCase):
def setUp(self):
@@ -99,27 +93,6 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertEqual(ipaddr.IP(self.ipv4.ip).version, 4)
self.assertEqual(ipaddr.IP(self.ipv6.ip).version, 6)
- if ipaddr._compat_has_real_bytes: # on python3+
- def testIpFromPacked(self):
- ip = ipaddr.IP
-
- self.assertEqual(self.ipv4.ip,
- ip(_cb('\x01\x02\x03\x04')).ip)
- self.assertEqual(ip('255.254.253.252'),
- ip(_cb('\xff\xfe\xfd\xfc')))
- self.assertRaises(ValueError, ipaddr.IP, _cb('\x00' * 3))
- self.assertRaises(ValueError, ipaddr.IP, _cb('\x00' * 5))
- self.assertEqual(self.ipv6.ip,
- ip(_cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
- '\x02\x00\x00\x00\x00\x00\x00\x01')).ip)
- self.assertEqual(ip('ffff:2:3:4:ffff::'),
- ip(_cb('\xff\xff\x00\x02\x00\x03\x00\x04' +
- '\xff\xff' + '\x00' * 6)))
- self.assertEqual(ip('::'),
- ip(_cb('\x00' * 16)))
- self.assertRaises(ValueError, ip, _cb('\x00' * 15))
- self.assertRaises(ValueError, ip, _cb('\x00' * 17))
-
def testGetIp(self):
self.assertEqual(self.ipv4.ip, 16909060)
self.assertEqual(self.ipv4.ip_ext, '1.2.3.4')
@@ -403,18 +376,17 @@ class IpaddrUnitTest(unittest.TestCase):
self.assertEqual(self.ipv6.version, 6)
def testPacked(self):
- self.assertEqual(self.ipv4.packed,
- _cb('\x01\x02\x03\x04'))
+ self.assertEqual(self.ipv4.packed, '\x01\x02\x03\x04')
self.assertEqual(ipaddr.IPv4('255.254.253.252').packed,
- _cb('\xff\xfe\xfd\xfc'))
+ '\xff\xfe\xfd\xfc')
self.assertEqual(self.ipv6.packed,
- _cb('\x20\x01\x06\x58\x02\x2a\xca\xfe'
- '\x02\x00\x00\x00\x00\x00\x00\x01'))
+ '\x20\x01\x06\x58\x02\x2a\xca\xfe'
+ + '\x02\x00\x00\x00\x00\x00\x00\x01')
self.assertEqual(ipaddr.IPv6('ffff:2:3:4:ffff::').packed,
- _cb('\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
- + '\x00' * 6))
+ '\xff\xff\x00\x02\x00\x03\x00\x04\xff\xff'
+ + '\x00' * 6)
self.assertEqual(ipaddr.IPv6('::1:0:0:0:0').packed,
- _cb('\x00' * 6 + '\x00\x01' + '\x00' * 8))
+ '\x00' * 6 + '\x00\x01' + '\x00' * 8)
def testIpStrFromPrefixlen(self):
ipv4 = ipaddr.IPv4('1.2.3.4/24')
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 3106353..3147f98 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -952,7 +952,9 @@ class ZipFile:
"""
# build the destination pathname, replacing
# forward slashes to platform specific separators.
- if targetpath[-1:] in (os.path.sep, os.path.altsep):
+ # Don't strip it if it is a drive.
+ if targetpath[-1:] in (os.path.sep, os.path.altsep) and \
+ not (len(targetpath) > 1 and targetpath[-2] == ":"):
targetpath = targetpath[:-1]
# don't include leading "/" from file name if present