[PyQt] Bug in sip.voidptr?
Nathan Weston
nathan at genarts.com
Fri Dec 10 20:56:23 GMT 2010
I think I've found a bug when constructing sip.voidptr from an integer.
This statement:
sip.voidptr(2**31)
raises an exception: TypeError: a single integer, Capsule, CObject, None
or another voidptr is required
The problem appears to be at voidptr.c:568
ptr = (void *)PyInt_AsLong(arg)
Python integers are signed, so 2**31 isn't a valid int (even though it's
a valid 32-bit pointer), thus the cast fails. Values smaller than 2**31
work fine. I was able to fix the problem by changing the cast to this:
ptr = (void *)PyLong_AsUnsignedLong(arg);
I'm not sure if this handles all overflows correctly (since a Python
long can be larger than 2**32), but it works for me.
Versions:
Centos 5 (64-bit)
Python 2.6.6 (32-bit)
sip 4.11.1
--
. . . . . . . . . . . . . . . . . . . . . . . . .
Nathan Weston nathan at genarts.com
GenArts, Inc. Tel: 617-492-2888
955 Mass. Ave Fax: 617-492-2852
Cambridge, MA 02139 USA www.genarts.com
More information about the PyQt
mailing list