Skip to content

Commit 505f454

Browse files
committed
Fix the gzip write-mode seek return value
Signed-off-by: Casper Verbuyst <casperverbuyst@gmail.com>
1 parent 796b26b commit 505f454

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

‎Lib/gzip.py‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,12 +456,11 @@ def seek(self, offset, whence=io.SEEK_SET):
456456
for i in range(count // self._buffer_size):
457457
self.write(chunk)
458458
self.write(b'\0' * (count % self._buffer_size))
459+
return offset
459460
elif self.mode == READ:
460461
self._check_not_closed()
461462
return self._buffer.seek(offset, whence)
462463

463-
return self.offset
464-
465464
def readline(self, size=-1):
466465
self._check_not_closed()
467466
return self._buffer.readline(size)

‎Lib/test/test_gzip.py‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,26 @@ def test_seek_write(self):
317317
# Try seek, write test
318318
with gzip.GzipFile(self.filename, 'w') as f:
319319
for pos in range(0, 256, 16):
320-
f.seek(pos)
320+
self.assertEqual(f.seek(pos), pos)
321321
f.write(b'GZ\n')
322322

323+
def test_seek_write_return_value(self):
324+
for whence in (io.SEEK_SET, io.SEEK_CUR):
325+
for padding in (16, 1024 * 1024):
326+
with self.subTest(whence=whence, padding=padding):
327+
data = io.BytesIO()
328+
with gzip.GzipFile(fileobj=data, mode='wb') as f:
329+
f.write(b'header')
330+
position = len(b'header') + padding
331+
offset = position if whence == io.SEEK_SET else padding
332+
self.assertEqual(f.seek(offset, whence), position)
333+
f.write(b'record')
334+
self.assertEqual(f.seek(0, io.SEEK_CUR),
335+
position + len(b'record'))
336+
self.assertEqual(f.tell(), position + len(b'record'))
337+
self.assertEqual(gzip.decompress(data.getvalue()),
338+
b'header' + b'\0' * padding + b'record')
339+
323340
def test_mode(self):
324341
self.test_write()
325342
with gzip.GzipFile(self.filename, 'r') as f:

0 commit comments

Comments
 (0)