[Libreoffice-commits] core.git: pyuno/source

Stephan Bergmann sbergman at redhat.com
Thu Jan 30 03:02:09 PST 2014


 pyuno/source/module/pyuno.cxx |   45 ++++++++++++++++++------------------------
 1 file changed, 20 insertions(+), 25 deletions(-)

New commits:
commit b1de7935b81d95875f625676b7dd6e6b059309e4
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Jan 30 12:01:27 2014 +0100

    coverity#983054, reorder code to avoid memory leak
    
    Change-Id: If14160802f77673e3ebe69850e00d0506125969c

diff --git a/pyuno/source/module/pyuno.cxx b/pyuno/source/module/pyuno.cxx
index be89061..ece4560 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<XSingleServiceFactory> &ssf )
 {
-    PyUNO* self;
-    Sequence<Any> arguments (1);
     Reference<XInterface> tmp_interface;
-
-    self = PyObject_New (PyUNO, &PyUNOType);
-    if (self == NULL)
-        return NULL; // == error
-    self->members = new PyUNOInternals();
-
-    arguments[0] <<= targetInterface;
+    Reference<XInvocation2> tmp_invocation;
     {
         PyThreadDetach antiguard;
-        tmp_interface = ssf->createInstanceWithArguments (arguments);
-
-        if (!tmp_interface.is ())
-        {
-            Py_INCREF( Py_None );
-            return Py_None;
-        }
-
-        Reference<XInvocation2> tmp_invocation (tmp_interface, UNO_QUERY);
-        if (!tmp_invocation.is()) {
-            throw RuntimeException (OUString::createFromAscii (
-                "XInvocation2 not implemented, cannot interact with object"),
-                Reference< XInterface > ());
+        Sequence<Any> 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<XInterface>());
         }
-
-        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;
 }
 


More information about the Libreoffice-commits mailing list