]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: Don't leak buffer if GetFDs fails in cmdCreate
authorJán Tomko <jtomko@redhat.com>
Mon, 24 Feb 2014 13:26:53 +0000 (14:26 +0100)
committerJán Tomko <jtomko@redhat.com>
Mon, 24 Feb 2014 17:46:34 +0000 (18:46 +0100)
Change the logic of the function to return false by default
and move the freeing of the buffer to the cleanup section.

https://bugzilla.redhat.com/show_bug.cgi?id=1067338

tools/virsh-domain.c

index 00ace11caa4b19ddfd4d0ef3acd538ed41aef415..59e843f174c8f5fadff058e29d5781799361e30b 100644 (file)
@@ -6518,7 +6518,7 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
 {
     virDomainPtr dom;
     const char *from = NULL;
-    bool ret = true;
+    bool ret = false;
     char *buffer;
 #ifndef WIN32
     bool console = vshCommandOptBool(cmd, "console");
@@ -6534,7 +6534,7 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
         return false;
 
     if (cmdStartGetFDs(ctl, cmd, &nfds, &fds) < 0)
-        return false;
+        goto cleanup;
 
     if (vshCommandOptBool(cmd, "paused"))
         flags |= VIR_DOMAIN_START_PAUSED;
@@ -6545,20 +6545,23 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
         dom = virDomainCreateXMLWithFiles(ctl->conn, buffer, nfds, fds, flags);
     else
         dom = virDomainCreateXML(ctl->conn, buffer, flags);
-    VIR_FREE(buffer);
 
-    if (dom != NULL) {
-        vshPrint(ctl, _("Domain %s created from %s\n"),
-                 virDomainGetName(dom), from);
-#ifndef WIN32
-        if (console)
-            cmdRunConsole(ctl, dom, NULL, 0);
-#endif
-        virDomainFree(dom);
-    } else {
+    if (!dom) {
         vshError(ctl, _("Failed to create domain from %s"), from);
-        ret = false;
+        goto cleanup;
     }
+
+    vshPrint(ctl, _("Domain %s created from %s\n"),
+             virDomainGetName(dom), from);
+#ifndef WIN32
+    if (console)
+        cmdRunConsole(ctl, dom, NULL, 0);
+#endif
+    virDomainFree(dom);
+    ret = true;
+
+cleanup:
+    VIR_FREE(buffer);
     VIR_FREE(fds);
     return ret;
 }