BZ2File.read(0) should return b"" rather than raising ValueError.
This fixes test_tarfile.py.
I've added a unit test for the correct bz2 behavior.
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index 28af42e..06293f5 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -65,6 +65,14 @@
self.assertEqual(bz2f.read(), self.TEXT)
bz2f.close()
+ def testRead0(self):
+ # Test BBZ2File.read(0)"
+ self.createTempFile()
+ bz2f = BZ2File(self.filename)
+ self.assertRaises(TypeError, bz2f.read, None)
+ self.assertEqual(bz2f.read(0), b"")
+ bz2f.close()
+
def testReadChunk10(self):
# "Test BZ2File.read() in chunks of 10 bytes"
self.createTempFile()
diff --git a/Modules/bz2module.c b/Modules/bz2module.c
index ee2186e..954c914 100644
--- a/Modules/bz2module.c
+++ b/Modules/bz2module.c
@@ -431,7 +431,7 @@
goto cleanup;
}
ret = PyBytes_FromStringAndSize((char *)NULL, buffersize);
- if (ret == NULL)
+ if (ret == NULL || buffersize == 0)
goto cleanup;
bytesread = 0;