[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



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 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_\.\+\-&amp;/%]+</param>
+      <param name="pattern">[a-zA-Z0-9_\.\+\-\\&amp;&quot;&apos;&lt;&gt;/%]+</param>
     </data>
   </define>
   <define name="absFilePath">
     <data type="string">
-      <param name="pattern">/[a-zA-Z0-9_\.\+\-&amp;/%]+</param>
+      <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&amp;&quot;&apos;&lt;&gt;/%]+</param>
     </data>
   </define>
   <define name="absDirPath">
     <data type="string">
-      <param name="pattern">/[a-zA-Z0-9_\.\+\-&amp;/%]*</param>
+      <param name="pattern">/[a-zA-Z0-9_\.\+\-\\&amp;&quot;&apos;&lt;&gt;/%]*</param>
     </data>
   </define>
   <define name="devicePath">
     <data type="string">
-      <param name="pattern">/[a-zA-Z0-9_\+\-/%]+</param>
+      <param name="pattern">/[a-zA-Z0-9_\+\-\\&amp;&quot;&apos;&lt;&gt;/%]+</param>
     </data>
   </define>
   <define name="deviceName">
     <data type="string">
-      <param name="pattern">[a-zA-Z0-9_\.\-:/]+</param>
+      <param name="pattern">[a-zA-Z0-9_\.\-\\&amp;&quot;&apos;&lt;&gt;:/]+</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&apos;&quot;'/>
+      <target dev='hdb' bus='ide'/>
+    </disk>
     <interface type='bridge'>
       <mac address='00:16:3e:66:92:9c'/>
       <source bridge='xenbr1'/>
-- 
1.7.3.2


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]