zlib.crc32 and zlib.adler32 now return an unsigned value as any sane person
would expect. Fixes issues1202.
This commit is contained in:
parent
c55485bc6d
commit
ab0d8a1f59
|
@ -42,6 +42,8 @@ The available exception and functions in this module are:
|
|||
the algorithm is designed for use as a checksum algorithm, it is not suitable
|
||||
for use as a general hash algorithm.
|
||||
|
||||
Always returns an unsigned 32-bit integer.
|
||||
|
||||
|
||||
.. function:: compress(string[, level])
|
||||
|
||||
|
@ -74,6 +76,8 @@ The available exception and functions in this module are:
|
|||
the algorithm is designed for use as a checksum algorithm, it is not suitable
|
||||
for use as a general hash algorithm.
|
||||
|
||||
Always returns an unsigned 32-bit integer.
|
||||
|
||||
|
||||
.. function:: decompress(string[, wbits[, bufsize]])
|
||||
|
||||
|
|
|
@ -38,6 +38,14 @@ class ChecksumTestCase(unittest.TestCase):
|
|||
self.assertEqual(zlib.crc32(b"penguin"), zlib.crc32(b"penguin", 0))
|
||||
self.assertEqual(zlib.adler32(b"penguin"),zlib.adler32(b"penguin",1))
|
||||
|
||||
def test_crc32_adler32_unsigned(self):
|
||||
foo = 'abcdefghijklmnop'
|
||||
# explicitly test signed behavior
|
||||
self.assertEqual(zlib.crc32(foo), 2486878355)
|
||||
self.assertEqual(zlib.crc32('spam'), 1138425661)
|
||||
self.assertEqual(zlib.adler32(foo+foo), 3573550353)
|
||||
self.assertEqual(zlib.adler32('spam'), 72286642)
|
||||
|
||||
|
||||
|
||||
class ExceptionTestCase(unittest.TestCase):
|
||||
|
|
|
@ -922,7 +922,7 @@ PyZlib_adler32(PyObject *self, PyObject *args)
|
|||
if (!PyArg_ParseTuple(args, "s#|k:adler32", &buf, &len, &adler32val))
|
||||
return NULL;
|
||||
adler32val = adler32(adler32val, buf, len);
|
||||
return PyLong_FromLong(adler32val);
|
||||
return PyLong_FromUnsignedLong(adler32val & 0xffffffff);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(crc32__doc__,
|
||||
|
@ -940,7 +940,7 @@ PyZlib_crc32(PyObject *self, PyObject *args)
|
|||
if (!PyArg_ParseTuple(args, "s#|k:crc32", &buf, &len, &crc32val))
|
||||
return NULL;
|
||||
crc32val = crc32(crc32val, buf, len);
|
||||
return PyLong_FromLong(crc32val);
|
||||
return PyLong_FromUnsignedLong(crc32val & 0xffffffff);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue