Fast-DDS-python icon indicating copy to clipboard operation
Fast-DDS-python copied to clipboard

free-nonheap-object produced from InstanceHandle.i

Open iurii-provizio opened this issue 2 years ago • 0 comments

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;
    }
}

iurii-provizio avatar Mar 30 '23 11:03 iurii-provizio