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

2010-11-19 Thread Cole Robinson
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 
---
 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 @@
   
   
 
-  [a-zA-Z0-9_\.\+\-&/%]+
+  [a-zA-Z0-9_\.\+\-\\&"'<>/%]+
 
   
   
 
-  /[a-zA-Z0-9_\.\+\-&/%]+
+  /[a-zA-Z0-9_\.\+\-\\&"'<>/%]+
 
   
   
 
-  /[a-zA-Z0-9_\.\+\-&/%]*
+  /[a-zA-Z0-9_\.\+\-\\&"'<>/%]*
 
   
   
 
-  /[a-zA-Z0-9_\+\-/%]+
+  /[a-zA-Z0-9_\+\-\\&"'<>/%]+
 
   
   
 
-  [a-zA-Z0-9_\.\-:/]+
+  [a-zA-Z0-9_\.\-\\&"'<>:/]+
 
   
   
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 @@
   
   
 
+
+  
+  
+  
+
 
   
   
-- 
1.7.3.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


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

2010-11-19 Thread Eric Blake
On 11/19/2010 09:15 AM, Cole Robinson wrote:
> 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.
> 
> -  /[a-zA-Z0-9_\.\+\-&/%]*
> +   name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]*

So far, so good...

>  
>
>
>  
> -  /[a-zA-Z0-9_\+\-/%]+
> +   name="pattern">/[a-zA-Z0-9_\+\-\\&"'<>/%]+

but given that a devicePath can't have '.', should it really be allowed
to have other characters like &, ", ', <, or >?

>  
>
>
>  
> -  [a-zA-Z0-9_\.\-:/]+
> +   name="pattern">[a-zA-Z0-9_\.\-\\&"'<>:/]+

Likewise for deviceName.

> +++ 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, "\"\"\""))) {

Ah, the bug fix for patch 1.  ACK to patch 1, then.

> +++ 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 @@
>
>
>  
> +
> +  
> +  

Hmm; this really is a case of deviceName in the domain.rng schema.  Are
there really devices named with ' or " in the name?

If so, then ACK to patch 2.  If not, then it would be better to use
, since that
would pick up on absFilePath, which is more likely to match reality of
having ' or " in the name.

-- 
Eric Blake   ebl...@redhat.com+1-801-349-2682
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

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

2010-11-19 Thread Cole Robinson
On 11/19/2010 03:38 PM, Eric Blake wrote:
> On 11/19/2010 09:15 AM, Cole Robinson wrote:
>> 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.
>>
>> -  /[a-zA-Z0-9_\.\+\-&/%]*
>> +  > name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]*
> 
> So far, so good...
> 
>>  
>>
>>
>>  
>> -  /[a-zA-Z0-9_\+\-/%]+
>> +  > name="pattern">/[a-zA-Z0-9_\+\-\\&"'<>/%]+
> 
> but given that a devicePath can't have '.', should it really be allowed
> to have other characters like &, ", ', <, or >?
> 

I didn't notice the lack of '.'  but should probably also be added. From
the XML point of view, a devicePath could really just be any old FS path.

Looking again, deviceName/Path are used in very different ways in the
schema, so this might need additional cleanup anyways. But anything that
represents a path should probably allow all valid path characters,
device or not.

>>  
>>
>>
>>  
>> -  [a-zA-Z0-9_\.\-:/]+
>> +  > name="pattern">[a-zA-Z0-9_\.\-\\&"'<>:/]+
> 
> Likewise for deviceName.
> 
>> +++ 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, "\"\"\""))) {
> 
> Ah, the bug fix for patch 1.  ACK to patch 1, then.
> 
>> +++ 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 @@
>>
>>
>>  
>> +
>> +  
>> +  
> 
> Hmm; this really is a case of deviceName in the domain.rng schema.  Are
> there really devices named with ' or " in the name?
> 

Probably not, but someone could always create a symbolic link with
whatever valid pathname they want.

> If so, then ACK to patch 2.  If not, then it would be better to use
> , since that
> would pick up on absFilePath, which is more likely to match reality of
> having ' or " in the name.
> 

Having a whacky named file is probably more likely, but behind the
scenes it's all the same code here that is being tested (xm disk block
generation). The restrictions in RNG were fairly arbitrary anyways.

Thanks,
Cole

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


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

2010-11-19 Thread Eric Blake
On 11/19/2010 02:51 PM, Cole Robinson wrote:
> On 11/19/2010 03:38 PM, Eric Blake wrote:
>> On 11/19/2010 09:15 AM, Cole Robinson wrote:
>>> 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.
>>>
>>> -  /[a-zA-Z0-9_\.\+\-&/%]*
>>> +  >> name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]*
>>
>> So far, so good...
>>
>>>  
>>>
>>>
>>>  
>>> -  /[a-zA-Z0-9_\+\-/%]+
>>> +  >> name="pattern">/[a-zA-Z0-9_\+\-\\&"'<>/%]+
>>
>> but given that a devicePath can't have '.', should it really be allowed
>> to have other characters like &, ", ', <, or >?
>>
> 
> I didn't notice the lack of '.'  but should probably also be added. From
> the XML point of view, a devicePath could really just be any old FS path.

If that's the case, then can we consolidate things rather than repeating
the same pattern multiple times?  That is, can the schema use _just_
filePath and absFilePath, rather than confusing things by adding devicePath?

-- 
Eric Blake   ebl...@redhat.com+1-801-349-2682
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

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

2010-11-22 Thread Cole Robinson
On 11/19/2010 04:56 PM, Eric Blake wrote:
> On 11/19/2010 02:51 PM, Cole Robinson wrote:
>> On 11/19/2010 03:38 PM, Eric Blake wrote:
>>> On 11/19/2010 09:15 AM, Cole Robinson wrote:
 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.

 -  /[a-zA-Z0-9_\.\+\-&/%]*
 +  >>> name="pattern">/[a-zA-Z0-9_\.\+\-\\&"'<>/%]*
>>>
>>> So far, so good...
>>>
  


  
 -  /[a-zA-Z0-9_\+\-/%]+
 +  >>> name="pattern">/[a-zA-Z0-9_\+\-\\&"'<>/%]+
>>>
>>> but given that a devicePath can't have '.', should it really be allowed
>>> to have other characters like &, ", ', <, or >?
>>>
>>
>> I didn't notice the lack of '.'  but should probably also be added. From
>> the XML point of view, a devicePath could really just be any old FS path.
> 
> If that's the case, then can we consolidate things rather than repeating
> the same pattern multiple times?  That is, can the schema use _just_
> filePath and absFilePath, rather than confusing things by adding devicePath?
> 

Sounds good, I'll update the patch.

Thanks,
Cole

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list