|
2 | 2 | from test import support
|
3 | 3 | import binascii
|
4 | 4 | import copy
|
| 5 | +import os |
5 | 6 | import pickle
|
6 | 7 | import random
|
7 | 8 | import sys
|
@@ -30,6 +31,16 @@ def _zlib_runtime_version_tuple(zlib_version=zlib.ZLIB_RUNTIME_VERSION):
|
30 | 31 | ZLIB_RUNTIME_VERSION_TUPLE = _zlib_runtime_version_tuple()
|
31 | 32 |
|
32 | 33 |
|
| 34 | +# bpo-46623: When a hardware accelerator is used (currently only on s390x), |
| 35 | +# using different ways to compress data with zlib can produce different |
| 36 | +# compressed data. |
| 37 | +# |
| 38 | +# To simplify the skip condition, make the assumption that s390x always has an |
| 39 | +# accelerator, and nothing else has it. |
| 40 | +# Windows doesn't have os.uname() but it doesn't support s390x. |
| 41 | +HW_ACCELERATED = hasattr(os, 'uname') and os.uname().machine == 's390x' |
| 42 | + |
| 43 | + |
33 | 44 | class VersionTestCase(unittest.TestCase):
|
34 | 45 |
|
35 | 46 | def test_library_version(self):
|
@@ -191,7 +202,10 @@ def test_speech128(self):
|
191 | 202 | # compress more data
|
192 | 203 | data = HAMLET_SCENE * 128
|
193 | 204 | x = zlib.compress(data)
|
194 |
| - self.assertEqual(zlib.compress(bytearray(data)), x) |
| 205 | + # With hardware acceleration, the compressed bytes |
| 206 | + # might not be identical. |
| 207 | + if not HW_ACCELERATED: |
| 208 | + self.assertEqual(zlib.compress(bytearray(data)), x) |
195 | 209 | for ob in x, bytearray(x):
|
196 | 210 | self.assertEqual(zlib.decompress(ob), data)
|
197 | 211 |
|
@@ -248,7 +262,10 @@ def test_pair(self):
|
248 | 262 | x1 = co.compress(data)
|
249 | 263 | x2 = co.flush()
|
250 | 264 | self.assertRaises(zlib.error, co.flush) # second flush should not work
|
251 |
| - self.assertEqual(x1 + x2, datazip) |
| 265 | + # With hardware acceleration, the compressed bytes might not |
| 266 | + # be identical. |
| 267 | + if not HW_ACCELERATED: |
| 268 | + self.assertEqual(x1 + x2, datazip) |
252 | 269 | for v1, v2 in ((x1, x2), (bytearray(x1), bytearray(x2))):
|
253 | 270 | dco = zlib.decompressobj()
|
254 | 271 | y1 = dco.decompress(v1 + v2)
|
|
0 commit comments