mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
bpo-38334: Fix seeking backward on an encrypted zipfile.ZipExtFile. (GH-16937)
Test by Daniel Hillier.
This commit is contained in:
parent
a8fb9327fb
commit
5c32af7522
3 changed files with 70 additions and 26 deletions
|
|
@ -1934,6 +1934,44 @@ class DecryptionTests(unittest.TestCase):
|
|||
self.assertRaises(TypeError, self.zip.open, "test.txt", pwd="python")
|
||||
self.assertRaises(TypeError, self.zip.extract, "test.txt", pwd="python")
|
||||
|
||||
def test_seek_tell(self):
|
||||
self.zip.setpassword(b"python")
|
||||
txt = self.plain
|
||||
test_word = b'encryption'
|
||||
bloc = txt.find(test_word)
|
||||
bloc_len = len(test_word)
|
||||
with self.zip.open("test.txt", "r") as fp:
|
||||
fp.seek(bloc, os.SEEK_SET)
|
||||
self.assertEqual(fp.tell(), bloc)
|
||||
fp.seek(-bloc, os.SEEK_CUR)
|
||||
self.assertEqual(fp.tell(), 0)
|
||||
fp.seek(bloc, os.SEEK_CUR)
|
||||
self.assertEqual(fp.tell(), bloc)
|
||||
self.assertEqual(fp.read(bloc_len), txt[bloc:bloc+bloc_len])
|
||||
|
||||
# Make sure that the second read after seeking back beyond
|
||||
# _readbuffer returns the same content (ie. rewind to the start of
|
||||
# the file to read forward to the required position).
|
||||
old_read_size = fp.MIN_READ_SIZE
|
||||
fp.MIN_READ_SIZE = 1
|
||||
fp._readbuffer = b''
|
||||
fp._offset = 0
|
||||
fp.seek(0, os.SEEK_SET)
|
||||
self.assertEqual(fp.tell(), 0)
|
||||
fp.seek(bloc, os.SEEK_CUR)
|
||||
self.assertEqual(fp.read(bloc_len), txt[bloc:bloc+bloc_len])
|
||||
fp.MIN_READ_SIZE = old_read_size
|
||||
|
||||
fp.seek(0, os.SEEK_END)
|
||||
self.assertEqual(fp.tell(), len(txt))
|
||||
fp.seek(0, os.SEEK_SET)
|
||||
self.assertEqual(fp.tell(), 0)
|
||||
|
||||
# Read the file completely to definitely call any eof integrity
|
||||
# checks (crc) and make sure they still pass.
|
||||
fp.read()
|
||||
|
||||
|
||||
class AbstractTestsWithRandomBinaryFiles:
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue