Commit 4bddea32 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #19053: ZipExtFile.read1() with non-zero argument no more returns empty

bytes until end of data.
parent 1384f065
...@@ -158,6 +158,45 @@ class AbstractTestsWithSourceFile: ...@@ -158,6 +158,45 @@ class AbstractTestsWithSourceFile:
for f in get_files(self): for f in get_files(self):
self.zip_random_open_test(f, self.compression) self.zip_random_open_test(f, self.compression)
def zip_read1_test(self, f, compression):
self.make_test_archive(f, compression)
# Read the ZIP archive
with zipfile.ZipFile(f, "r") as zipfp, \
zipfp.open(TESTFN) as zipopen:
zipdata = []
while True:
read_data = zipopen.read1(-1)
if not read_data:
break
zipdata.append(read_data)
self.assertEqual(b''.join(zipdata), self.data)
def test_read1(self):
for f in get_files(self):
self.zip_read1_test(f, self.compression)
def zip_read1_10_test(self, f, compression):
self.make_test_archive(f, compression)
# Read the ZIP archive
with zipfile.ZipFile(f, "r") as zipfp, \
zipfp.open(TESTFN) as zipopen:
zipdata = []
while True:
read_data = zipopen.read1(10)
self.assertLessEqual(len(read_data), 10)
if not read_data:
break
zipdata.append(read_data)
self.assertEqual(b''.join(zipdata), self.data)
def test_read1_10(self):
for f in get_files(self):
self.zip_read1_10_test(f, self.compression)
def zip_readline_read_test(self, f, compression): def zip_readline_read_test(self, f, compression):
self.make_test_archive(f, compression) self.make_test_archive(f, compression)
......
...@@ -785,8 +785,11 @@ class ZipExtFile(io.BufferedIOBase): ...@@ -785,8 +785,11 @@ class ZipExtFile(io.BufferedIOBase):
buf = self._readbuffer[self._offset:] buf = self._readbuffer[self._offset:]
self._readbuffer = b'' self._readbuffer = b''
self._offset = 0 self._offset = 0
data = self._read1(self.MAX_N) while not self._eof:
buf += data data = self._read1(self.MAX_N)
if data:
buf += data
break
return buf return buf
end = n + self._offset end = n + self._offset
...@@ -800,12 +803,16 @@ class ZipExtFile(io.BufferedIOBase): ...@@ -800,12 +803,16 @@ class ZipExtFile(io.BufferedIOBase):
self._readbuffer = b'' self._readbuffer = b''
self._offset = 0 self._offset = 0
if n > 0: if n > 0:
data = self._read1(n) while not self._eof:
if n < len(data): data = self._read1(n)
self._readbuffer = data if n < len(data):
self._offset = n self._readbuffer = data
data = data[:n] self._offset = n
buf += data buf += data[:n]
break
if data:
buf += data
break
return buf return buf
def _read1(self, n): def _read1(self, n):
......
...@@ -71,6 +71,9 @@ Core and Builtins ...@@ -71,6 +71,9 @@ Core and Builtins
Library Library
------- -------
- Issue #19053: ZipExtFile.read1() with non-zero argument no more returns empty
bytes until end of data.
- Issue #19028: Fixed tkinter.Tkapp.merge() for non-string arguments. - Issue #19028: Fixed tkinter.Tkapp.merge() for non-string arguments.
- Issue #3015: Fixed tkinter with wantobject=False. Any Tcl command call - Issue #3015: Fixed tkinter with wantobject=False. Any Tcl command call
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment