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 @@
         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 @@
                 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 @@
                 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 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 @@
         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 @@
         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 @@
         """
         # 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
