Create a signed CRC32 hash. I'm not absolutely sure it's correct. At least it fixes the unit tests and doesn't create a different hash than Python 2.x

This commit is contained in:
Christian Heimes 2008-03-19 22:42:51 +00:00
parent d5e2b6f3bc
commit 453e08c3bf
2 changed files with 2 additions and 2 deletions

View File

@ -42,7 +42,7 @@ class ChecksumTestCase(unittest.TestCase):
def test_crc32_adler32_unsigned(self): def test_crc32_adler32_unsigned(self):
foo = 'abcdefghijklmnop' foo = 'abcdefghijklmnop'
# explicitly test signed behavior # explicitly test signed behavior
self.assertEqual(zlib.crc32(foo), 2486878355) self.assertEqual(zlib.crc32(foo), -1808088941)
self.assertEqual(zlib.crc32('spam'), 1138425661) self.assertEqual(zlib.crc32('spam'), 1138425661)
self.assertEqual(zlib.adler32(foo+foo), 3573550353) self.assertEqual(zlib.adler32(foo+foo), 3573550353)
self.assertEqual(zlib.adler32('spam'), 72286642) self.assertEqual(zlib.adler32('spam'), 72286642)

View File

@ -940,7 +940,7 @@ PyZlib_crc32(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "s#|k:crc32", &buf, &len, &crc32val)) if (!PyArg_ParseTuple(args, "s#|k:crc32", &buf, &len, &crc32val))
return NULL; return NULL;
crc32val = crc32(crc32val, buf, len); crc32val = crc32(crc32val, buf, len);
return PyLong_FromUnsignedLong(crc32val & 0xffffffff); return PyLong_FromLong(crc32val & 0xffffffff);
} }