From b1de7935b81d95875f625676b7dd6e6b059309e4 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Thu, 30 Jan 2014 12:01:27 +0100 Subject: coverity#983054, reorder code to avoid memory leak Change-Id: If14160802f77673e3ebe69850e00d0506125969c --- pyuno/source/module/pyuno.cxx | 45 +++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 25 deletions(-) (limited to 'pyuno') diff --git a/pyuno/source/module/pyuno.cxx b/pyuno/source/module/pyuno.cxx index be8906172e6c..ece456094291 100644 --- a/pyuno/source/module/pyuno.cxx +++ b/pyuno/source/module/pyuno.cxx @@ -741,36 +741,31 @@ PyObject* PyUNO_new_UNCHECKED ( const Any &targetInterface, const Reference &ssf ) { - PyUNO* self; - Sequence arguments (1); Reference tmp_interface; - - self = PyObject_New (PyUNO, &PyUNOType); - if (self == NULL) - return NULL; // == error - self->members = new PyUNOInternals(); - - arguments[0] <<= targetInterface; + Reference tmp_invocation; { PyThreadDetach antiguard; - tmp_interface = ssf->createInstanceWithArguments (arguments); - - if (!tmp_interface.is ()) - { - Py_INCREF( Py_None ); - return Py_None; - } - - Reference tmp_invocation (tmp_interface, UNO_QUERY); - if (!tmp_invocation.is()) { - throw RuntimeException (OUString::createFromAscii ( - "XInvocation2 not implemented, cannot interact with object"), - Reference< XInterface > ()); + Sequence arguments(1); + arguments[0] <<= targetInterface; + tmp_interface = ssf->createInstanceWithArguments(arguments); + tmp_invocation.set(tmp_interface, UNO_QUERY); + if (!tmp_invocation.is() && tmp_interface.is()) { + throw RuntimeException( + "XInvocation2 not implemented, cannot interact with object", + Reference()); } - - self->members->xInvocation = tmp_invocation; - self->members->wrappedObject = targetInterface; } + if (!tmp_interface.is()) + { + Py_INCREF( Py_None ); + return Py_None; + } + PyUNO* self = PyObject_New (PyUNO, &PyUNOType); + if (self == NULL) + return NULL; // == error + self->members = new PyUNOInternals(); + self->members->xInvocation = tmp_invocation; + self->members->wrappedObject = targetInterface; return (PyObject*) self; } -- cgit v1.2.3