]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
snapshot: avoid virsh crash with older servers
authorEric Blake <eblake@redhat.com>
Fri, 8 Jun 2012 03:46:47 +0000 (21:46 -0600)
committerCole Robinson <crobinso@redhat.com>
Thu, 14 Jun 2012 22:38:27 +0000 (18:38 -0400)
Commits 5108230116d7b39, and 521cc447 introduced support for
'virsh snapshot-list --from' when talking to a server older than
0.9.5, but broke support for plain 'virsh snapshot-list' for the
same old server in the process.  Because the code is not properly
gated, we end up with a SIGSEGV during a strcmp with a NULL argument.

* tools/virsh.c (cmdSnapshotList): Don't waste time on fallbacks
when --from is not present.
(cherry picked from commit d9f606659829e666803d95d05aee9ca1ecced955)

tools/virsh.c

index 31d784cecea80ce914271702f47cbd9b7d45678b..7307ccb5caf5c270fae68aca9d31ceb2c07e4bae 100644 (file)
@@ -16482,10 +16482,10 @@ cmdSnapshotList(vshControl *ctl, const vshCmd *cmd)
 
     qsort(&names[0], actual, sizeof(char*), namesorter);
 
-    if (tree || ctl->useSnapshotOld) {
+    if (tree || (from && ctl->useSnapshotOld)) {
         parents = vshCalloc(ctl, sizeof(char *), actual);
         for (i = (from && !ctl->useSnapshotOld); i < actual; i++) {
-            if (ctl->useSnapshotOld && STREQ(names[i], from)) {
+            if (from && ctl->useSnapshotOld && STREQ(names[i], from)) {
                 start_index = i;
                 continue;
             }
@@ -16507,7 +16507,8 @@ cmdSnapshotList(vshControl *ctl, const vshCmd *cmd)
         char indentBuf[INDENT_BUFLEN];
         for (i = 0 ; i < actual ; i++) {
             memset(indentBuf, '\0', sizeof(indentBuf));
-            if (ctl->useSnapshotOld ? STREQ(names[i], from) : !parents[i])
+            if ((from && ctl->useSnapshotOld) ? STREQ(names[i], from) :
+                !parents[i])
                 cmdNodeListDevicesPrint(ctl,
                                         names,
                                         parents,
@@ -16576,7 +16577,7 @@ cmdSnapshotList(vshControl *ctl, const vshCmd *cmd)
         }
 
         for (i = 0; i < actual; i++) {
-            if (ctl->useSnapshotOld &&
+            if (from && ctl->useSnapshotOld &&
                 (descendants ? !names[i] : STRNEQ_NULLABLE(parents[i], from)))
                 continue;