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(a)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