[libvirt] [PATCH 2/4] conf: Fix parsing python style triple quotes

Cole Robinson crobinso at redhat.com
Fri Nov 19 16:15:37 UTC 2010


An incorrect check broke matching the closing set of quotes. Update
tests to cover this case for XM config files, and update the domain schema
to allow more path characters.

Signed-off-by: Cole Robinson <crobinso at redhat.com>
---
 docs/schemas/domain.rng                  |   10 +++++-----
 src/util/conf.c                          |    3 ++-
 tests/xmconfigdata/test-escape-paths.cfg |    2 +-
 tests/xmconfigdata/test-escape-paths.xml |    5 +++++
 4 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng
index bbbc846..870bea1 100644
--- a/docs/schemas/domain.rng
+++ b/docs/schemas/domain.rng
@@ -2028,27 +2028,27 @@
   </define>
   <define name="filePath">
     <data type="string">
-      <param name="pattern">[a-zA-Z0-9_\.\+\-&/%]+</param>
+      <param name="pattern">[a-zA-Z0-9_\.\+\-\\&"'<>/%]+</param>
     </data>
   </define>
   <define name="absFilePath">
     <data type="string">
-      <param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]+</param>
+      <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]+</param>
     </data>
   </define>
   <define name="absDirPath">
     <data type="string">
-      <param name="pattern">/[a-zA-Z0-9_\.\+\-&/%]*</param>
+      <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]*</param>
     </data>
   </define>
   <define name="devicePath">
     <data type="string">
-      <param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
+      <param name="pattern">/[a-zA-Z0-9_\+\-\\&"'<>/%]+</param>
     </data>
   </define>
   <define name="deviceName">
     <data type="string">
-      <param name="pattern">[a-zA-Z0-9_\.\-:/]+</param>
+      <param name="pattern">[a-zA-Z0-9_\.\-\\&"'<>:/]+</param>
     </data>
   </define>
   <define name="bridgeMode">
diff --git a/src/util/conf.c b/src/util/conf.c
index a31bbc4..d9a7603 100644
--- a/src/util/conf.c
+++ b/src/util/conf.c
@@ -400,8 +400,9 @@ virConfParseString(virConfParserCtxtPtr ctxt)
         ctxt->cur += 3;
         base = ctxt->cur;
 
+        /* Find the ending triple quotes */
         while ((ctxt->cur + 2 < ctxt->end) &&
-               (STRPREFIX(ctxt->cur, "\"\"\""))) {
+               !(STRPREFIX(ctxt->cur, "\"\"\""))) {
             if (CUR == '\n')
                 ctxt->line++;
             NEXT;
diff --git a/tests/xmconfigdata/test-escape-paths.cfg b/tests/xmconfigdata/test-escape-paths.cfg
index f9f2cb8..e3e6db9 100644
--- a/tests/xmconfigdata/test-escape-paths.cfg
+++ b/tests/xmconfigdata/test-escape-paths.cfg
@@ -19,7 +19,7 @@ vnc = 1
 vncunused = 1
 vnclisten = "127.0.0.1"
 vncpasswd = "123poi"
-disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso&test,hdc:cdrom,r" ]
+disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso&test,hdc:cdrom,r", """phy:/dev/HostVG/XenGuest'",hdb,w""" ]
 vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ]
 parallel = "none"
 serial = "none"
diff --git a/tests/xmconfigdata/test-escape-paths.xml b/tests/xmconfigdata/test-escape-paths.xml
index dabf492..13e6e29 100644
--- a/tests/xmconfigdata/test-escape-paths.xml
+++ b/tests/xmconfigdata/test-escape-paths.xml
@@ -31,6 +31,11 @@
       <target dev='hdc' bus='ide'/>
       <readonly/>
     </disk>
+    <disk type='block' device='disk'>
+      <driver name='phy'/>
+      <source dev='/dev/HostVG/XenGuest'"'/>
+      <target dev='hdb' bus='ide'/>
+    </disk>
     <interface type='bridge'>
       <mac address='00:16:3e:66:92:9c'/>
       <source bridge='xenbr1'/>
-- 
1.7.3.2




More information about the libvir-list mailing list