Jiri Daněk created DISPATCH-2270:
------------------------------------

             Summary: Do not rely on long type being large enough to transfer C 
pointer values from C to Python
                 Key: DISPATCH-2270
                 URL: https://issues.apache.org/jira/browse/DISPATCH-2270
             Project: Qpid Dispatch
          Issue Type: Sub-task
    Affects Versions: 1.17.0
            Reporter: Jiri Daněk


{code}
// We pass pointers as longs via the python interface, make sure this is safe.
STATIC_ASSERT(sizeof(long) >= sizeof(void*), pointer_is_bigger_than_long);
{code}

This is wrong on Win64, where long is 4 bytes. There is multiple possible 
solutions:

# use {{long long}}, trivial workaround
** https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue
# construct the python value explicitly, probably the nicest solution, and 
should not even add extra overhead
** https://docs.python.org/3/c-api/long.html#c.PyLong_FromVoidPtr
# use PyCapsules, not a good fit for existing code, requires changing signature 
in C on the callee side
** https://docs.python.org/3/c-api/capsule.html
** 
https://docs.python.org/3/extending/extending.html?highlight=capsule#providing-a-c-api-for-an-extension-module

and maybe even more possibilities. I am inclined to go with the 
PyLong_FromVoidPtr value constructor.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to