Message46996
Description:
The code in the struct module assumes that sizeof(long)
== sizeof(int)
which is wrong on (most) 64-bit architectures (linux on
amd64 with a 32-bit userland is an exception).
How To Repeat:
on a 32-bit platform struct.pack behaves as expected:
$ uname -m -r -s
FreeBSD 4.10-STABLE i386
$ python -c "import struct; print repr(struct.pack('I',
4294967296))"
Traceback (most recent call last):
File "<string>", line 1, in ?
OverflowError: long int too large to convert
on a 64-bit platform it treats integers as longs
(it does not check for over/underflows and returns the
lower 4 byte):
$ uname -m -r -s
FreeBSD 5.2-CURRENT sparc64
$ python -c "import struct; print repr(struct.pack('I',
4294967296))"
'\x00\x00\x00\x00'
Fix:
in python/python/dist/src/Modules/structmodule.c:
np_uint() and np_int() have to check for
over/underflows using MAX_UINT, MAX_INT, MIN_INT as
np_ushort() and np_short() already do for MAX_USHORT, ...
the attached patch does this
(diff was generated using diff -rNu and Revision 2.62
of python/python/dist/src/Modules/structmodule.c)
|
|
Date |
User |
Action |
Args |
2007-08-23 15:40:01 | admin | link | issue1038854 messages |
2007-08-23 15:40:01 | admin | create | |
|