Kaydet (Commit) f5cdacfa authored tarafından Michael W. Hudson's avatar Michael W. Hudson

backport tim_one's checkin of

    revision 2.35 of binascii.c

Fix for SF bug #576327: zipfile when sizeof(long) == 8
binascii_crc32():  Make this return a signed 4-byte result across
platforms.  The other way to make this platform-independent would be to
make it return an unsigned unbounded int, but the evidence suggests
other code out there treats it like a signed 4-byte int (e.g., existing
code writing the result with struct.pack "l" format).

Bugfix candidate.
üst 74f1f76e
...@@ -861,6 +861,7 @@ binascii_crc32(PyObject *self, PyObject *args) ...@@ -861,6 +861,7 @@ binascii_crc32(PyObject *self, PyObject *args)
unsigned char *bin_data; unsigned char *bin_data;
unsigned long crc = 0UL; /* initial value of CRC */ unsigned long crc = 0UL; /* initial value of CRC */
int len; int len;
long result;
if ( !PyArg_ParseTuple(args, "s#|l:crc32", &bin_data, &len, &crc) ) if ( !PyArg_ParseTuple(args, "s#|l:crc32", &bin_data, &len, &crc) )
return NULL; return NULL;
...@@ -869,7 +870,16 @@ binascii_crc32(PyObject *self, PyObject *args) ...@@ -869,7 +870,16 @@ binascii_crc32(PyObject *self, PyObject *args)
while(len--) while(len--)
crc = crc_32_tab[(crc ^ *bin_data++) & 0xffUL] ^ (crc >> 8); crc = crc_32_tab[(crc ^ *bin_data++) & 0xffUL] ^ (crc >> 8);
/* Note: (crc >> 8) MUST zero fill on left */ /* Note: (crc >> 8) MUST zero fill on left */
return Py_BuildValue("l", crc ^ 0xFFFFFFFFUL);
result = (long)(crc ^ 0xFFFFFFFFUL);
/* If long is > 32 bits, extend the sign bit. This is one way to
* ensure the result is the same across platforms. The other way
* would be to return an unbounded long, but the evidence suggests
* that lots of code outside this treats the result as if it were
* a signed 4-byte integer.
*/
result |= -(result & (1L << 31));
return PyInt_FromLong(result);
} }
......
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