[Libguestfs] [PATCH 3/4] lib: Escape , as , , on qemu command line (RHBZ#811649).

Richard W.M. Jones rjones at redhat.com
Thu Apr 12 18:34:52 UTC 2012


From: "Richard W.M. Jones" <rjones at redhat.com>

---
 src/launch.c |   19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/launch.c b/src/launch.c
index fe858b8..b61c538 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -1370,18 +1370,31 @@ is_openable (guestfs_h *g, const char *path, int flags)
 static char *
 qemu_drive_param (guestfs_h *g, const struct drive *drv)
 {
+  size_t i;
   size_t len = 64;
+  const char *p;
   char *r;
 
-  len += strlen (drv->path);
+  len += strlen (drv->path) * 2; /* every "," could become ",," */
   len += strlen (drv->iface);
   if (drv->format)
     len += strlen (drv->format);
 
   r = safe_malloc (g, len);
 
-  snprintf (r, len, "file=%s%s%s%s%s,if=%s",
-            drv->path,
+  strcpy (r, "file=");
+  i = 5;
+
+  /* Copy the path in, escaping any "," as ",,". */
+  for (p = drv->path; *p; p++) {
+    if (*p == ',') {
+      r[i++] = ',';
+      r[i++] = ',';
+    } else
+      r[i++] = *p;
+  }
+
+  snprintf (&r[i], len-i, "%s%s%s%s,if=%s",
             drv->readonly ? ",snapshot=on" : "",
             drv->use_cache_off ? ",cache=off" : "",
             drv->format ? ",format=" : "",
-- 
1.7.9.3




More information about the Libguestfs mailing list