Author: Julian Berman <julian...@grayvines.com>
Branch: 
Changeset: r95865:ec33801be3ff
Date: 2019-02-06 11:43 +0100
http://bitbucket.org/pypy/pypy/changeset/ec33801be3ff/

Log:    Merge zlib-copying-redux

diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -5,6 +5,10 @@
 .. this is a revision shortly after release-pypy-7.0.0
 .. startrev: 481c69f7d81f
 
+.. branch: zlib-copying-redux
+
+Fix calling copy on already-flushed compressobjs.
+
 .. branch: zlib-copying
 
 The zlib module's compressobj and decompressobj now expose copy methods
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
@@ -175,6 +175,11 @@
         try:
             self.lock()
             try:
+                if not self.stream:
+                    raise oefmt(
+                        space.w_ValueError,
+                        "Compressor was already flushed",
+                    )
                 copied = rzlib.deflateCopy(self.stream)
             finally:
                 self.unlock()
@@ -318,9 +323,6 @@
         try:
             self.lock()
             try:
-                if not self.stream:
-                    raise zlib_error(space,
-                                     "decompressor object already flushed")
                 copied = rzlib.inflateCopy(self.stream)
             finally:
                 self.unlock()
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
@@ -307,7 +307,8 @@
 
         assert (d1 + from_copy) == (d1 + from_decompressor)
 
-    def test_unsuccessful_decompress_copy(self):
+    def test_cannot_copy_decompressor_with_stream_in_inconsistent_state(self):
+        if self.runappdirect: skip("can't run with -A")
         decompressor = self.zlib.decompressobj()
         self.intentionally_break_a_z_stream(zobj=decompressor)
         raises(self.zlib.error, decompressor.copy)
@@ -341,7 +342,13 @@
 
         assert (d1 + from_copy) == (d1 + from_compressor)
 
-    def test_unsuccessful_compress_copy(self):
+    def test_cannot_copy_compressor_with_stream_in_inconsistent_state(self):
+        if self.runappdirect: skip("can't run with -A")
         compressor = self.zlib.compressobj()
         self.intentionally_break_a_z_stream(zobj=compressor)
         raises(self.zlib.error, compressor.copy)
+
+    def test_cannot_copy_compressor_with_flushed_stream(self):
+        compressor = self.zlib.compressobj()
+        compressor.flush()
+        raises(ValueError, compressor.copy)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to