Kaydet (Commit) 742dca73 authored tarafından David Bolen's avatar David Bolen Kaydeden (comit) Michael Stahl

fdo#46926: PyUNO_cmp: return acquired reference

üst 3c4cd1de
...@@ -595,6 +595,8 @@ int PyUNO_setattr (PyObject* self, char* name, PyObject* value) ...@@ -595,6 +595,8 @@ int PyUNO_setattr (PyObject* self, char* name, PyObject* value)
// ensure object identity and struct equality // ensure object identity and struct equality
static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op ) static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
{ {
PyObject *result;
if(op != Py_EQ && op != Py_NE) if(op != Py_EQ && op != Py_NE)
{ {
PyErr_SetString(PyExc_TypeError, "only '==' and '!=' comparisions are defined"); PyErr_SetString(PyExc_TypeError, "only '==' and '!=' comparisions are defined");
...@@ -602,7 +604,9 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op ) ...@@ -602,7 +604,9 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
} }
if( self == that ) if( self == that )
{ {
return (op == Py_EQ ? Py_True : Py_False); result = (op == Py_EQ ? Py_True : Py_False);
Py_INCREF(result);
return result;
} }
try try
{ {
...@@ -624,14 +628,18 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op ) ...@@ -624,14 +628,18 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
Reference< XMaterialHolder > xOther( other->members->xInvocation,UNO_QUERY ); Reference< XMaterialHolder > xOther( other->members->xInvocation,UNO_QUERY );
if( xMe->getMaterial() == xOther->getMaterial() ) if( xMe->getMaterial() == xOther->getMaterial() )
{ {
return (op == Py_EQ ? Py_True : Py_False); result = (op == Py_EQ ? Py_True : Py_False);
Py_INCREF(result);
return result;
} }
} }
else if( tcMe == com::sun::star::uno::TypeClass_INTERFACE ) else if( tcMe == com::sun::star::uno::TypeClass_INTERFACE )
{ {
if( me->members->wrappedObject == other->members->wrappedObject ) if( me->members->wrappedObject == other->members->wrappedObject )
{ {
return (op == Py_EQ ? Py_True : Py_False); result = (op == Py_EQ ? Py_True : Py_False);
Py_INCREF(result);
return result;
} }
} }
} }
...@@ -641,7 +649,10 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op ) ...@@ -641,7 +649,10 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
{ {
raisePyExceptionWithAny( makeAny( e ) ); raisePyExceptionWithAny( makeAny( e ) );
} }
return (op == Py_EQ ? Py_False : Py_True);
result = (op == Py_EQ ? Py_False : Py_True);
Py_INCREF(result);
return result;
} }
/* Python 2 has a tp_flags value for rich comparisons. Python 3 does not (on by default) */ /* Python 2 has a tp_flags value for rich comparisons. Python 3 does not (on by default) */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment