summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2010-08-23 14:00:22 +0100
committerDaniel P. Berrange <berrange@redhat.com>2010-10-13 16:42:48 +0100
commit3a092f38994a57f3c12397464f7532cb82e15e14 (patch)
treedd1d99c2ea5f3df70a9183a6dc3c59756e22cd56
parent4435f3c4779b8e2a63166ebe987979e921afa5e0 (diff)
downloadlibvirt-3a092f38994a57f3c12397464f7532cb82e15e14.tar.gz
Fix Xen SEXPR generation to properly quote strings containing ()
* src/xen/sexpr.c: Ensure () are escaped in sexpr2string * tests/sexpr2xmldata/sexpr2xml-boot-grub.sexpr, tests/sexpr2xmldata/sexpr2xml-boot-grub.xml, tests/xml2sexprdata/xml2sexpr-boot-grub.sexpr, tests/xml2sexprdata/xml2sexpr-boot-grub.xml: Data files to check escaping * tests/sexpr2xmltest.c, tests/xml2sexprtest.c: Add boot-grub escaping test case
-rw-r--r--src/xen/sexpr.c4
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-boot-grub.sexpr1
-rw-r--r--tests/sexpr2xmldata/sexpr2xml-boot-grub.xml26
-rw-r--r--tests/sexpr2xmltest.c2
-rw-r--r--tests/xml2sexprdata/xml2sexpr-boot-grub.sexpr1
-rw-r--r--tests/xml2sexprdata/xml2sexpr-boot-grub.xml21
-rw-r--r--tests/xml2sexprtest.c2
7 files changed, 56 insertions, 1 deletions
diff --git a/src/xen/sexpr.c b/src/xen/sexpr.c
index 2184060853..330280e1ca 100644
--- a/src/xen/sexpr.c
+++ b/src/xen/sexpr.c
@@ -244,7 +244,9 @@ sexpr2string(const struct sexpr * sexpr, char *buffer, size_t n_buffer)
ret += tmp;
break;
case SEXPR_VALUE:
- if (strchr(sexpr->u.value, ' '))
+ if (strchr(sexpr->u.value, ' ') ||
+ strchr(sexpr->u.value, ')') ||
+ strchr(sexpr->u.value, '('))
tmp = snprintf(buffer + ret, n_buffer - ret, "'%s'",
sexpr->u.value);
else
diff --git a/tests/sexpr2xmldata/sexpr2xml-boot-grub.sexpr b/tests/sexpr2xmldata/sexpr2xml-boot-grub.sexpr
new file mode 100644
index 0000000000..f42fc32901
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-boot-grub.sexpr
@@ -0,0 +1 @@
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/usr/lib/xen/boot/pv-grub-x86_64.gz')(args '(hd0,0)/grub/menu.lst')))(device (vbd (dev 'xvda')(uname 'phy:/dev/MainVG/GuestVG')(mode 'w'))))
diff --git a/tests/sexpr2xmldata/sexpr2xml-boot-grub.xml b/tests/sexpr2xmldata/sexpr2xml-boot-grub.xml
new file mode 100644
index 0000000000..9221bdd7ff
--- /dev/null
+++ b/tests/sexpr2xmldata/sexpr2xml-boot-grub.xml
@@ -0,0 +1,26 @@
+<domain type='xen' id='6'>
+ <name>pvtest</name>
+ <uuid>596a5d21-71f4-8fb2-e068-e2386a5c413e</uuid>
+ <memory>430080</memory>
+ <currentMemory>430080</currentMemory>
+ <vcpu>2</vcpu>
+ <os>
+ <type>linux</type>
+ <kernel>/usr/lib/xen/boot/pv-grub-x86_64.gz</kernel>
+ <cmdline>(hd0,0)/grub/menu.lst</cmdline>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>destroy</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='block' device='disk'>
+ <driver name='phy'/>
+ <source dev='/dev/MainVG/GuestVG'/>
+ <target dev='xvda' bus='xen'/>
+ </disk>
+ <console type='pty'>
+ <target type='xen' port='0'/>
+ </console>
+ </devices>
+</domain>
diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c
index 8c75c52cab..d62b44f8d6 100644
--- a/tests/sexpr2xmltest.c
+++ b/tests/sexpr2xmltest.c
@@ -172,6 +172,8 @@ mymain(int argc, char **argv)
DO_TEST("fv-net-ioemu", "fv-net-ioemu", 1);
DO_TEST("fv-net-netfront", "fv-net-netfront", 1);
+ DO_TEST("boot-grub", "boot-grub", 1);
+
virCapabilitiesFree(caps);
return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
diff --git a/tests/xml2sexprdata/xml2sexpr-boot-grub.sexpr b/tests/xml2sexprdata/xml2sexpr-boot-grub.sexpr
new file mode 100644
index 0000000000..a9d14df68d
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-boot-grub.sexpr
@@ -0,0 +1 @@
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d21-71f4-8fb2-e068-e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/usr/lib/xen/boot/pv-grub-x86_64.gz')(args (hd0,0)/grub/menu.lst)))(device (vbd (dev 'xvda')(uname 'phy:/dev/MainVG/GuestLV')(mode 'w')))) \ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-boot-grub.xml b/tests/xml2sexprdata/xml2sexpr-boot-grub.xml
new file mode 100644
index 0000000000..b9b1c9f784
--- /dev/null
+++ b/tests/xml2sexprdata/xml2sexpr-boot-grub.xml
@@ -0,0 +1,21 @@
+<domain type='xen' id='15'>
+ <name>pvtest</name>
+ <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+ <os>
+ <type>linux</type>
+ <kernel>/usr/lib/xen/boot/pv-grub-x86_64.gz</kernel>
+ <cmdline>(hd0,0)/grub/menu.lst</cmdline>
+ </os>
+ <memory>430080</memory>
+ <vcpu>2</vcpu>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>destroy</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='block' device='disk'>
+ <source dev='/dev/MainVG/GuestLV'/>
+ <target dev='xvda'/>
+ </disk>
+ <console tty='/dev/pts/4'/>
+ </devices>
+</domain>
diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c
index 49b757467d..77cf760597 100644
--- a/tests/xml2sexprtest.c
+++ b/tests/xml2sexprtest.c
@@ -161,6 +161,8 @@ mymain(int argc, char **argv)
DO_TEST("fv-net-ioemu", "fv-net-ioemu", "fvtest", 1);
DO_TEST("fv-net-netfront", "fv-net-netfront", "fvtest", 1);
+ DO_TEST("boot-grub", "boot-grub", "fvtest", 1);
+
virCapabilitiesFree(caps);
return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);