Revision: 192
http://informixdb.svn.sourceforge.net/informixdb/?rev=192&view=rev
Author: chaese
Date: 2012-06-01 02:58:10 +0000 (Fri, 01 Jun 2012)
Log Message:
-----------
Convert closure arguments from void* to int more safely. The values that are
passed around are guaranteed to fit into an int, so we're not concerned about
a possible size difference between ints and pointers.
Modified Paths:
--------------
trunk/informixdb/ext/_informixdb.ec
Modified: trunk/informixdb/ext/_informixdb.ec
===================================================================
--- trunk/informixdb/ext/_informixdb.ec 2012-06-01 02:49:44 UTC (rev 191)
+++ trunk/informixdb/ext/_informixdb.ec 2012-06-01 02:58:10 UTC (rev 192)
@@ -112,11 +112,13 @@
typedef void sqlbreakcallbackfunc(mint);
/************************* Helpers *************************/
+#define INT_FROM_VOIDPTR(x) ((int)((char*)x-(char*)0))
+
static PyObject *get_bool_from_int(PyObject *self, void *closure)
{
int *p;
- p = (int*)((char*)self+(int)closure);
+ p = (int*)((char*)self+INT_FROM_VOIDPTR(closure));
if (*p) {
Py_INCREF(Py_True);
return Py_True;
@@ -130,7 +132,7 @@
static int set_bool_to_int(PyObject *self, PyObject *value, void *closure)
{
int *p;
- p = (int*)((char*)self+(int)closure);
+ p = (int*)((char*)self+INT_FROM_VOIDPTR(closure));
*p = PyObject_IsTrue(value)?1:0;
return 0;
}
@@ -4147,7 +4149,7 @@
if (!lo_spec) {
ret_on_dberror(self->conn, NULL, "ifx_lo_stat_cspec");
}
- switch ((int)closure) {
+ switch (INT_FROM_VOIDPTR(closure)) {
case SBLOB_CSPEC_ESTBYTES:
if (ifx_lo_specget_estbytes(lo_spec, &int8result)<0) {
ret_on_dberror(self->conn, NULL, "ifx_lo_specget_estbytes");
@@ -4178,7 +4180,7 @@
if (ifx_lo_stat_free(lo_stat)<0) {
ret_on_dberror(self->conn, NULL, "ifx_lo_stat_free");
}
- switch ((int)closure) {
+ switch (INT_FROM_VOIDPTR(closure)) {
case SBLOB_CSPEC_EXTSZ:
case SBLOB_CSPEC_FLAGS:
return PyInt_FromLong((long)mintresult); break;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|