summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bolen <db3l.net@gmail.com>2012-03-16 22:10:24 +0100
committerMichael Stahl <mstahl@redhat.com>2012-03-16 22:18:43 +0100
commit742dca7366ba6ac3c58b1df6ee548788f4ce24e7 (patch)
treed6683cfb247681b662d7a1970e9f7d02d3f36f84
parent3c4cd1deaf71d0d800957b3580d426c721bf7844 (diff)
fdo#46926: PyUNO_cmp: return acquired reference
-rw-r--r--pyuno/source/module/pyuno.cxx19
1 files changed, 15 insertions, 4 deletions
diff --git a/pyuno/source/module/pyuno.cxx b/pyuno/source/module/pyuno.cxx
index d51ad3bc95fc..827c0a388b2f 100644
--- a/pyuno/source/module/pyuno.cxx
+++ b/pyuno/source/module/pyuno.cxx
@@ -595,6 +595,8 @@ int PyUNO_setattr (PyObject* self, char* name, PyObject* value)
// ensure object identity and struct equality
static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
{
+ PyObject *result;
+
if(op != Py_EQ && op != Py_NE)
{
PyErr_SetString(PyExc_TypeError, "only '==' and '!=' comparisions are defined");
@@ -602,7 +604,9 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
}
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
{
@@ -624,14 +628,18 @@ static PyObject* PyUNO_cmp( PyObject *self, PyObject *that, int op )
Reference< XMaterialHolder > xOther( other->members->xInvocation,UNO_QUERY );
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 )
{
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 )
{
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) */