diff options
author | David Bolen <db3l.net@gmail.com> | 2012-03-16 22:10:24 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-03-16 22:18:43 +0100 |
commit | 742dca7366ba6ac3c58b1df6ee548788f4ce24e7 (patch) | |
tree | d6683cfb247681b662d7a1970e9f7d02d3f36f84 /pyuno | |
parent | 3c4cd1deaf71d0d800957b3580d426c721bf7844 (diff) |
fdo#46926: PyUNO_cmp: return acquired reference
Diffstat (limited to 'pyuno')
-rw-r--r-- | pyuno/source/module/pyuno.cxx | 19 |
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) */ |