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 <crobi...@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 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list