Author: Julian Berman <[email protected]>
Branch: zlib-copying
Changeset: r95839:9709a7461303
Date: 2019-02-05 14:49 +0100
http://bitbucket.org/pypy/pypy/changeset/9709a7461303/

Log:    Make sure we pass unused_data and unconsumed_tail along.

diff --git a/pypy/module/zlib/interp_zlib.py b/pypy/module/zlib/interp_zlib.py
--- a/pypy/module/zlib/interp_zlib.py
+++ b/pypy/module/zlib/interp_zlib.py
@@ -352,8 +352,8 @@
         return Decompress(
             space=space,
             stream=copied,
-            # unused_data=self.unused_data,
-            # unconsumed_tail=self.unconsumed_tail,
+            unused_data=self.unused_data,
+            unconsumed_tail=self.unconsumed_tail,
         )
 
     def flush(self, space, w_length=None):
diff --git a/pypy/module/zlib/test/test_zlib.py 
b/pypy/module/zlib/test/test_zlib.py
--- a/pypy/module/zlib/test/test_zlib.py
+++ b/pypy/module/zlib/test/test_zlib.py
@@ -312,6 +312,23 @@
         self.intentionally_break_a_z_stream(zobj=decompressor)
         raises(self.zlib.error, decompressor.copy)
 
+    def test_decompress_copy_carries_along_state(self):
+        """
+        Decompressor.unused_data and unconsumed_tail are carried along when a
+        copy is done.
+        """
+        decompressor = self.zlib.decompressobj()
+        decompressor.decompress(self.compressed, max_length=5)
+        unconsumed_tail = decompressor.unconsumed_tail
+        assert unconsumed_tail
+        assert decompressor.copy().unconsumed_tail == unconsumed_tail
+
+        decompressor.decompress(decompressor.unconsumed_tail)
+        decompressor.decompress("xxx")
+        unused_data = decompressor.unused_data
+        assert unused_data
+        assert decompressor.copy().unused_data == unused_data
+
     def test_compress_copy(self):
         compressor = self.zlib.compressobj()
         d1 = compressor.compress(self.expanded[:10])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to