[pypy-commit] pypy default: issue1299: BZ2Decompressor.decompress('') does not raise EOFError at

arigo noreply at buildbot.pypy.org
Fri Oct 26 12:01:40 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r58432:469ecc21fa11
Date: 2012-10-24 16:45 +0200
http://bitbucket.org/pypy/pypy/changeset/469ecc21fa11/

Log:	issue1299: BZ2Decompressor.decompress('') does not raise EOFError at
	end-of-stream. Patch by nadeem.vawda.

diff --git a/pypy/module/bz2/interp_bz2.py b/pypy/module/bz2/interp_bz2.py
--- a/pypy/module/bz2/interp_bz2.py
+++ b/pypy/module/bz2/interp_bz2.py
@@ -406,12 +406,16 @@
             read += length
 
     def readall(self):
-        w_result = self.decompressor.decompress(self.stream.readall())
-        if self.decompressor.running:
-            raise OperationError(self.space.w_EOFError,
-                                 self.space.wrap("compressed file ended before the logical end-of-the-stream was detected"))
-        result = self.space.str_w(w_result)
-        self.readlength += len(result)
+        raw = self.stream.readall()
+        if raw:
+            w_result = self.decompressor.decompress(raw)
+            if self.decompressor.running:
+                raise OperationError(self.space.w_EOFError,
+                                     self.space.wrap("compressed file ended before the logical end-of-the-stream was detected"))
+            result = self.space.str_w(w_result)
+            self.readlength += len(result)
+        else:
+            result = ""
         if len(self.buffer) != self.pos:
             pos = self.pos
             assert pos >= 0
@@ -649,11 +653,11 @@
         was found after the end of stream, it'll be ignored and saved in
         unused_data attribute."""
 
-        if data == '':
-            return self.space.wrap('')
         if not self.running:
             raise OperationError(self.space.w_EOFError,
                 self.space.wrap("end of stream was already found"))
+        if data == '':
+            return self.space.wrap('')
 
         in_bufsize = len(data)
 
diff --git a/pypy/module/bz2/test/test_bz2_compdecomp.py b/pypy/module/bz2/test/test_bz2_compdecomp.py
--- a/pypy/module/bz2/test/test_bz2_compdecomp.py
+++ b/pypy/module/bz2/test/test_bz2_compdecomp.py
@@ -156,6 +156,7 @@
         bz2d = BZ2Decompressor()
         bz2d.decompress(self.DATA)
         raises(EOFError, bz2d.decompress, "foo")
+        raises(EOFError, bz2d.decompress, "")
 
     def test_buffer(self):
         from bz2 import BZ2Decompressor


More information about the pypy-commit mailing list