mirror of https://github.com/python/cpython.git
bpo-39359: [zipfile] add missing "pwd: expected bytes, got str" exception (GH-18031)
This commit is contained in:
parent
86b833badd
commit
91099e2544
|
@ -2190,10 +2190,23 @@ def test_good_password(self):
|
|||
self.assertEqual(self.zip2.read("zero"), self.plain2)
|
||||
|
||||
def test_unicode_password(self):
|
||||
self.assertRaises(TypeError, self.zip.setpassword, "unicode")
|
||||
self.assertRaises(TypeError, self.zip.read, "test.txt", "python")
|
||||
self.assertRaises(TypeError, self.zip.open, "test.txt", pwd="python")
|
||||
self.assertRaises(TypeError, self.zip.extract, "test.txt", pwd="python")
|
||||
expected_msg = "pwd: expected bytes, got str"
|
||||
|
||||
with self.assertRaisesRegex(TypeError, expected_msg):
|
||||
self.zip.setpassword("unicode")
|
||||
|
||||
with self.assertRaisesRegex(TypeError, expected_msg):
|
||||
self.zip.read("test.txt", "python")
|
||||
|
||||
with self.assertRaisesRegex(TypeError, expected_msg):
|
||||
self.zip.open("test.txt", pwd="python")
|
||||
|
||||
with self.assertRaisesRegex(TypeError, expected_msg):
|
||||
self.zip.extract("test.txt", pwd="python")
|
||||
|
||||
with self.assertRaisesRegex(TypeError, expected_msg):
|
||||
self.zip.pwd = "python"
|
||||
self.zip.open("test.txt")
|
||||
|
||||
def test_seek_tell(self):
|
||||
self.zip.setpassword(b"python")
|
||||
|
|
|
@ -1508,8 +1508,6 @@ def open(self, name, mode="r", pwd=None, *, force_zip64=False):
|
|||
"""
|
||||
if mode not in {"r", "w"}:
|
||||
raise ValueError('open() requires mode "r" or "w"')
|
||||
if pwd and not isinstance(pwd, bytes):
|
||||
raise TypeError("pwd: expected bytes, got %s" % type(pwd).__name__)
|
||||
if pwd and (mode == "w"):
|
||||
raise ValueError("pwd is only supported for reading files")
|
||||
if not self.fp:
|
||||
|
@ -1577,6 +1575,8 @@ def open(self, name, mode="r", pwd=None, *, force_zip64=False):
|
|||
if is_encrypted:
|
||||
if not pwd:
|
||||
pwd = self.pwd
|
||||
if pwd and not isinstance(pwd, bytes):
|
||||
raise TypeError("pwd: expected bytes, got %s" % type(pwd).__name__)
|
||||
if not pwd:
|
||||
raise RuntimeError("File %r is encrypted, password "
|
||||
"required for extraction" % name)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Add one missing check that the password is a bytes object for an encrypted zipfile.
|
Loading…
Reference in New Issue