]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Escape snapshot name passed to {save,load,del}vm
authorJiri Denemark <jdenemar@redhat.com>
Wed, 9 Mar 2011 20:47:06 +0000 (21:47 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 10 Mar 2011 13:36:05 +0000 (14:36 +0100)
src/qemu/qemu_monitor_text.c

index 67e27db9c19d9604e9dae6f16052eccd4abd6c4a..a423212e88bf38d965b4377d153f98dda8f6fa29 100644 (file)
@@ -2566,13 +2566,15 @@ cleanup:
 
 int qemuMonitorTextCreateSnapshot(qemuMonitorPtr mon, const char *name)
 {
-    char *cmd;
+    char *cmd = NULL;
     char *reply = NULL;
     int ret = -1;
+    char *safename;
 
-    if (virAsprintf(&cmd, "savevm \"%s\"", name) < 0) {
+    if (!(safename = qemuMonitorEscapeArg(name)) ||
+        virAsprintf(&cmd, "savevm \"%s\"", safename) < 0) {
         virReportOOMError();
-        return -1;
+        goto cleanup;
     }
 
     if (qemuMonitorHMPCommand(mon, cmd, &reply)) {
@@ -2604,6 +2606,7 @@ int qemuMonitorTextCreateSnapshot(qemuMonitorPtr mon, const char *name)
     ret = 0;
 
 cleanup:
+    VIR_FREE(safename);
     VIR_FREE(cmd);
     VIR_FREE(reply);
     return ret;
@@ -2611,13 +2614,15 @@ cleanup:
 
 int qemuMonitorTextLoadSnapshot(qemuMonitorPtr mon, const char *name)
 {
-    char *cmd;
+    char *cmd = NULL;
     char *reply = NULL;
     int ret = -1;
+    char *safename;
 
-    if (virAsprintf(&cmd, "loadvm \"%s\"", name) < 0) {
+    if (!(safename = qemuMonitorEscapeArg(name)) ||
+        virAsprintf(&cmd, "loadvm \"%s\"", safename) < 0) {
         virReportOOMError();
-        return -1;
+        goto cleanup;
     }
 
     if (qemuMonitorHMPCommand(mon, cmd, &reply)) {
@@ -2660,6 +2665,7 @@ int qemuMonitorTextLoadSnapshot(qemuMonitorPtr mon, const char *name)
     ret = 0;
 
 cleanup:
+    VIR_FREE(safename);
     VIR_FREE(cmd);
     VIR_FREE(reply);
     return ret;
@@ -2667,13 +2673,15 @@ cleanup:
 
 int qemuMonitorTextDeleteSnapshot(qemuMonitorPtr mon, const char *name)
 {
-    char *cmd;
+    char *cmd = NULL;
     char *reply = NULL;
     int ret = -1;
+    char *safename;
 
-    if (virAsprintf(&cmd, "delvm \"%s\"", name) < 0) {
+    if (!(safename = qemuMonitorEscapeArg(name)) ||
+        virAsprintf(&cmd, "delvm \"%s\"", safename) < 0) {
         virReportOOMError();
-        return -1;
+        goto cleanup;
     }
     if (qemuMonitorHMPCommand(mon, cmd, &reply)) {
         qemuReportError(VIR_ERR_OPERATION_FAILED,
@@ -2700,6 +2708,7 @@ int qemuMonitorTextDeleteSnapshot(qemuMonitorPtr mon, const char *name)
     ret = 0;
 
 cleanup:
+    VIR_FREE(safename);
     VIR_FREE(cmd);
     VIR_FREE(reply);
     return ret;