Skip to content

Commit d4b1d55

Browse files
miss-islingtonGruffElixirStanFromIreland
authored
[3.15] gh-158169: Clear zlib.Decompress.unconsumed_tail at end of stream (GH-158177) (GH-158228)
(cherry picked from commit 8122ff4) Co-authored-by: GruffElixir <samarthat9@gmail.com> Co-authored-by: Stan Ulbrych <stan@python.org>
1 parent 5f437c5 commit d4b1d55

3 files changed

Lines changed: 15 additions & 0 deletions

File tree

‎Lib/test/test_zlib.py‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,18 @@ def test_decompress_unused_data(self):
762762
self.assertEqual(dco.unconsumed_tail, b'')
763763
self.assertEqual(dco.unused_data, remainder)
764764

765+
def test_decompress_unconsumed_tail_after_eof(self):
766+
source = b'abcdefghijklmnopqrstuvwxyz'
767+
remainder = b'0123456789'
768+
dco = zlib.decompressobj()
769+
data = dco.decompress(zlib.compress(source) + remainder, 1)
770+
data += dco.decompress(dco.unconsumed_tail)
771+
772+
self.assertTrue(dco.eof)
773+
self.assertEqual(data, source)
774+
self.assertEqual(dco.unconsumed_tail, b'')
775+
self.assertEqual(dco.unused_data, remainder)
776+
765777
# issue27164
766778
def test_decompress_raw_with_dictionary(self):
767779
zdict = b'abcdefghijklmnopqrstuvwxyz'
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :attr:`zlib.Decompress.unconsumed_tail` duplicating
2+
:attr:`~zlib.Decompress.unused_data` after end of stream when *max_length* was used.

‎Modules/zlibmodule.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,7 @@ save_unconsumed_input(compobject *self, Py_buffer *data, int err)
838838
return -1;
839839
}
840840
Py_SETREF(self->unused_data, new_unused_data);
841+
self->zst.next_in += left_size;
841842
self->zst.avail_in = 0;
842843
}
843844
}

0 commit comments

Comments
 (0)