Commit c618ae8e authored by Martin Panter's avatar Martin Panter

Issue #5784: wbits=0 apparently added in zlib v1.2.3.5

parent 0fdf41d8
...@@ -142,6 +142,7 @@ The available exception and functions in this module are: ...@@ -142,6 +142,7 @@ The available exception and functions in this module are:
must include a zlib header and trailer. must include a zlib header and trailer.
* 0: Automatically determine the window size from the zlib header. * 0: Automatically determine the window size from the zlib header.
Only supported since zlib 1.2.3.5.
* −8 to −15: Uses the absolute value of *wbits* as the window size * −8 to −15: Uses the absolute value of *wbits* as the window size
logarithm. The input must be a raw stream with no header or trailer. logarithm. The input must be a raw stream with no header or trailer.
......
...@@ -681,10 +681,18 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -681,10 +681,18 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
data = None data = None
def test_wbits(self): def test_wbits(self):
# wbits=0 only supported since zlib v1.2.3.5
# Register "1.2.3" as "1.2.3.0"
v = (zlib.ZLIB_RUNTIME_VERSION + ".0").split(".", 4)
supports_wbits_0 = int(v[0]) > 1 or int(v[0]) == 1 \
and (int(v[1]) > 2 or int(v[1]) == 2
and (int(v[2]) > 3 or int(v[2]) == 3 and int(v[3]) >= 5))
co = zlib.compressobj(level=1, wbits=15) co = zlib.compressobj(level=1, wbits=15)
zlib15 = co.compress(HAMLET_SCENE) + co.flush() zlib15 = co.compress(HAMLET_SCENE) + co.flush()
self.assertEqual(zlib.decompress(zlib15, 15), HAMLET_SCENE) self.assertEqual(zlib.decompress(zlib15, 15), HAMLET_SCENE)
self.assertEqual(zlib.decompress(zlib15, 0), HAMLET_SCENE) if supports_wbits_0:
self.assertEqual(zlib.decompress(zlib15, 0), HAMLET_SCENE)
self.assertEqual(zlib.decompress(zlib15, 32 + 15), HAMLET_SCENE) self.assertEqual(zlib.decompress(zlib15, 32 + 15), HAMLET_SCENE)
with self.assertRaisesRegex(zlib.error, 'invalid window size'): with self.assertRaisesRegex(zlib.error, 'invalid window size'):
zlib.decompress(zlib15, 14) zlib.decompress(zlib15, 14)
...@@ -698,7 +706,8 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): ...@@ -698,7 +706,8 @@ class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase):
zlib9 = co.compress(HAMLET_SCENE) + co.flush() zlib9 = co.compress(HAMLET_SCENE) + co.flush()
self.assertEqual(zlib.decompress(zlib9, 9), HAMLET_SCENE) self.assertEqual(zlib.decompress(zlib9, 9), HAMLET_SCENE)
self.assertEqual(zlib.decompress(zlib9, 15), HAMLET_SCENE) self.assertEqual(zlib.decompress(zlib9, 15), HAMLET_SCENE)
self.assertEqual(zlib.decompress(zlib9, 0), HAMLET_SCENE) if supports_wbits_0:
self.assertEqual(zlib.decompress(zlib9, 0), HAMLET_SCENE)
self.assertEqual(zlib.decompress(zlib9, 32 + 9), HAMLET_SCENE) self.assertEqual(zlib.decompress(zlib9, 32 + 9), HAMLET_SCENE)
dco = zlib.decompressobj(wbits=32 + 9) dco = zlib.decompressobj(wbits=32 + 9)
self.assertEqual(dco.decompress(zlib9), HAMLET_SCENE) self.assertEqual(dco.decompress(zlib9), HAMLET_SCENE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment