9ae3a8
From 00e5b1ffe79264929ea0dab871e5e797ab85497f Mon Sep 17 00:00:00 2001
9ae3a8
From: Max Reitz <mreitz@redhat.com>
9ae3a8
Date: Mon, 19 Aug 2013 11:09:45 +0200
9ae3a8
Subject: qemu-img: Error out for excess arguments
9ae3a8
9ae3a8
RH-Author: Max Reitz <mreitz@redhat.com>
9ae3a8
Message-id: <1376910585-8875-1-git-send-email-mreitz@redhat.com>
9ae3a8
Patchwork-id: 53597
9ae3a8
O-Subject: [RHEL-7 qemu-kvm PATCH] qemu-img: Error out for excess arguments
9ae3a8
Bugzilla: 992935
9ae3a8
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
9ae3a8
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
9ae3a8
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
9ae3a8
9ae3a8
From: Kevin Wolf <kwolf@redhat.com>
9ae3a8
9ae3a8
Don't silently ignore excess arguments at the end of the command line,
9ae3a8
but error out instead. This can catch typos like 'resize test.img + 1G',
9ae3a8
which doesn't increase the image size by 1G as intended, but truncates
9ae3a8
the image to 1G. Even for less dangerous commands, the old behaviour is
9ae3a8
confusing.
9ae3a8
9ae3a8
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
9ae3a8
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
9ae3a8
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
9ae3a8
(cherry picked from commit fc11eb26cee7e3621645dd40cd9de944201f590b)
9ae3a8
Signed-off-by: Max Reitz <mreitz@redhat.com>
9ae3a8
9ae3a8
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=992935
9ae3a8
Brew: https://brewweb.devel.redhat.com/taskinfo?taskID=6181030
9ae3a8
9ae3a8
diff --git a/qemu-img.c b/qemu-img.c
9ae3a8
index cd096a1..c20ff66 100644
9ae3a8
--- a/qemu-img.c
9ae3a8
+++ b/qemu-img.c
9ae3a8
@@ -393,6 +393,9 @@ static int img_create(int argc, char **argv)
9ae3a8
         }
9ae3a8
         img_size = (uint64_t)sval;
9ae3a8
     }
9ae3a8
+    if (optind != argc) {
9ae3a8
+        help();
9ae3a8
+    }
9ae3a8
 
9ae3a8
     if (options && is_help_option(options)) {
9ae3a8
         return print_block_option_help(filename, fmt);
9ae3a8
@@ -570,7 +573,7 @@ static int img_check(int argc, char **argv)
9ae3a8
             break;
9ae3a8
         }
9ae3a8
     }
9ae3a8
-    if (optind >= argc) {
9ae3a8
+    if (optind != argc - 1) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename = argv[optind++];
9ae3a8
@@ -681,7 +684,7 @@ static int img_commit(int argc, char **argv)
9ae3a8
             break;
9ae3a8
         }
9ae3a8
     }
9ae3a8
-    if (optind >= argc) {
9ae3a8
+    if (optind != argc - 1) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename = argv[optind++];
9ae3a8
@@ -927,7 +930,7 @@ static int img_compare(int argc, char **argv)
9ae3a8
     }
9ae3a8
 
9ae3a8
 
9ae3a8
-    if (optind > argc - 2) {
9ae3a8
+    if (optind != argc - 2) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename1 = argv[optind++];
9ae3a8
@@ -1882,7 +1885,7 @@ static int img_info(int argc, char **argv)
9ae3a8
             break;
9ae3a8
         }
9ae3a8
     }
9ae3a8
-    if (optind >= argc) {
9ae3a8
+    if (optind != argc - 1) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename = argv[optind++];
9ae3a8
@@ -1983,7 +1986,7 @@ static int img_snapshot(int argc, char **argv)
9ae3a8
         }
9ae3a8
     }
9ae3a8
 
9ae3a8
-    if (optind >= argc) {
9ae3a8
+    if (optind != argc - 1) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename = argv[optind++];
9ae3a8
@@ -2094,7 +2097,7 @@ static int img_rebase(int argc, char **argv)
9ae3a8
         progress = 0;
9ae3a8
     }
9ae3a8
 
9ae3a8
-    if ((optind >= argc) || (!unsafe && !out_baseimg)) {
9ae3a8
+    if ((optind != argc - 1) || (!unsafe && !out_baseimg)) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename = argv[optind++];
9ae3a8
@@ -2373,7 +2376,7 @@ static int img_resize(int argc, char **argv)
9ae3a8
             break;
9ae3a8
         }
9ae3a8
     }
9ae3a8
-    if (optind >= argc) {
9ae3a8
+    if (optind != argc - 1) {
9ae3a8
         help();
9ae3a8
     }
9ae3a8
     filename = argv[optind++];