Fast-DDS-python
Fast-DDS-python copied to clipboard
free-nonheap-object produced from InstanceHandle.i
Dear eProsima,
Current (main) version of Fast-DDS-python produces a SWIG wrapper with a genuine deletion of a stack object:
SWIGINTERN PyObject *_wrap_delete_InstanceHandleValue_t(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
eprosima::fastrtps::rtps::InstanceHandleValue_t *arg1 = (eprosima::fastrtps::rtps::InstanceHandleValue_t *) 0 ;
eprosima::fastrtps::rtps::InstanceHandleValue_t temp1 ;
PyObject *swig_obj[1] ;
if (!args) SWIG_fail;
swig_obj[0] = args;
{
if (PyTuple_Check(swig_obj[0]))
{
eprosima::fastrtps::rtps::octet* buf = temp1;
if (!PyArg_ParseTuple(swig_obj[0], "BBBBBBBBBBBBBBBB",
buf, buf+1, buf+2, buf+3, buf+4, buf+5, buf+6, buf+7, buf+8,
buf+9, buf+10, buf+11, buf+12, buf+13, buf+14, buf+15))
{
PyErr_SetString(PyExc_TypeError, "tuple must have 16 elements");
SWIG_fail;
}
arg1 = &temp1;
}
else
{
PyErr_SetString(PyExc_TypeError, "expected a tuple.");
SWIG_fail;
}
}
{
try {
{
SWIG_PYTHON_THREAD_BEGIN_ALLOW;
delete arg1;
SWIG_PYTHON_THREAD_END_ALLOW;
}
}
catch (Swig::DirectorException &e) {
SWIG_fail;
}
}
resultobj = SWIG_Py_Void();
return resultobj;
fail:
return NULL;
}
eprosima::fastrtps::rtps::InstanceHandleValue_t temp1 ;
...
arg1 = &temp1;
...
delete arg1;
It's coming from fastdds_python/src/swig/fastdds/rtps/common/InstanceHandle.i:
%typemap(in) eprosima::fastrtps::rtps::InstanceHandleValue_t*(eprosima::fastrtps::rtps::InstanceHandleValue_t temp)
{
if (PyTuple_Check($input))
{
eprosima::fastrtps::rtps::octet* buf = temp;
if (!PyArg_ParseTuple($input, "BBBBBBBBBBBBBBBB",
buf, buf+1, buf+2, buf+3, buf+4, buf+5, buf+6, buf+7, buf+8,
buf+9, buf+10, buf+11, buf+12, buf+13, buf+14, buf+15))
{
PyErr_SetString(PyExc_TypeError, "tuple must have 16 elements");
SWIG_fail;
}
$1 = &temp;
}
else
{
PyErr_SetString(PyExc_TypeError, "expected a tuple.");
SWIG_fail;
}
}