]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
virsh: error out on non-numeric timeout values
authorJán Tomko <jtomko@redhat.com>
Tue, 26 Mar 2013 15:41:06 +0000 (16:41 +0100)
committerJán Tomko <jtomko@redhat.com>
Tue, 26 Mar 2013 16:28:36 +0000 (17:28 +0100)
Some block commands and migrate ignored incorrect values.

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

tools/virsh-domain.c

index 592a6e837755fdf5a91f2da9420d9d8bff75e1ef..12bdd58fbca9c34f542c539432ea3040116af570 100644 (file)
@@ -1495,14 +1495,14 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd)
     const char *path = NULL;
     bool quit = false;
     int abort_flags = 0;
+    int rv;
 
     if (blocking) {
-        if (vshCommandOptInt(cmd, "timeout", &timeout) > 0) {
-            if (timeout < 1) {
-                vshError(ctl, "%s", _("invalid timeout"));
-                return false;
-            }
-
+        if ((rv = vshCommandOptInt(cmd, "timeout", &timeout)) < 0 ||
+            (rv > 0 && timeout < 1)) {
+            vshError(ctl, "%s", _("invalid timeout"));
+            return false;
+        } else if (rv > 0) {
             /* Ensure that we can multiply by 1000 without overflowing. */
             if (timeout > INT_MAX / 1000) {
                 vshError(ctl, "%s", _("timeout is too big"));
@@ -1685,18 +1685,18 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd)
     const char *path = NULL;
     bool quit = false;
     int abort_flags = 0;
+    int rv;
 
     if (blocking) {
         if (pivot && finish) {
             vshError(ctl, "%s", _("cannot mix --pivot and --finish"));
             return false;
         }
-        if (vshCommandOptInt(cmd, "timeout", &timeout) > 0) {
-            if (timeout < 1) {
-                vshError(ctl, "%s", _("invalid timeout"));
-                return false;
-            }
-
+        if ((rv = vshCommandOptInt(cmd, "timeout", &timeout)) < 0 ||
+            (rv > 0 && timeout < 1)) {
+            vshError(ctl, "%s", _("invalid timeout"));
+            return false;
+        } else if (rv > 0) {
             /* Ensure that we can multiply by 1000 without overflowing. */
             if (timeout > INT_MAX / 1000) {
                 vshError(ctl, "%s", _("timeout is too big"));
@@ -1962,14 +1962,14 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
     const char *path = NULL;
     bool quit = false;
     int abort_flags = 0;
+    int rv;
 
     if (blocking) {
-        if (vshCommandOptInt(cmd, "timeout", &timeout) > 0) {
-            if (timeout < 1) {
-                vshError(ctl, "%s", _("invalid timeout"));
-                return false;
-            }
-
+        if ((rv = vshCommandOptInt(cmd, "timeout", &timeout)) < 0 ||
+            (rv > 0 && timeout < 1)) {
+            vshError(ctl, "%s", _("invalid timeout"));
+            return false;
+        } else if (rv > 0) {
             /* Ensure that we can multiply by 1000 without overflowing. */
             if (timeout > INT_MAX / 1000) {
                 vshError(ctl, "%s", _("timeout is too big"));
@@ -8456,6 +8456,7 @@ cmdMigrate(vshControl *ctl, const vshCmd *cmd)
     int timeout = 0;
     bool live_flag = false;
     vshCtrlData data;
+    int rv;
 
     if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return false;
@@ -8465,18 +8466,17 @@ cmdMigrate(vshControl *ctl, const vshCmd *cmd)
 
     if (vshCommandOptBool(cmd, "live"))
         live_flag = true;
-    if (vshCommandOptInt(cmd, "timeout", &timeout) > 0) {
+    if ((rv = vshCommandOptInt(cmd, "timeout", &timeout)) < 0 ||
+        (rv > 0 && timeout < 1)) {
+        vshError(ctl, "%s", _("migrate: Invalid timeout"));
+        goto cleanup;
+    } else if (rv > 0) {
         if (! live_flag) {
             vshError(ctl, "%s",
                      _("migrate: Unexpected timeout for offline migration"));
             goto cleanup;
         }
 
-        if (timeout < 1) {
-            vshError(ctl, "%s", _("migrate: Invalid timeout"));
-            goto cleanup;
-        }
-
         /* Ensure that we can multiply by 1000 without overflowing. */
         if (timeout > INT_MAX / 1000) {
             vshError(ctl, "%s", _("migrate: Timeout is too big"));