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

Re: [Xen-devel] [libvirt] Libvirt config converter can't handle file not ending with new line



On Tue, 7 Nov 2017 12:20:05 +0000
Wei Liu <wei.liu2@xxxxxxxxxx> wrote:

> On Mon, Nov 06, 2017 at 09:41:01PM -0700, Jim Fehlig wrote:
> > On 10/30/2017 06:17 AM, Wei Liu wrote:  
> > > Hi Jim
> > > 
> > > I discover a problem when using xen_xl converter. When the file in
> > > question doesn't end with a new line, I get the following error:
> > > 
> > >    error: configuration file syntax error: memory conf:53: expecting a 
> > > value  
> > 
> > I'm not able to reproduce this issue. The libvirt.git tree I tried was a bit
> > dated, but even after updating to latest master I can't reproduce.
> >   
> > > After digging a bit (but haven't read libvirt code), it appears that the
> > > file didn't end with a new line.  
> > 
> > I tried several files without ending new lines, going both directions
> > (domxml-to-native and domxml-from-native), but didn't see the mentioned
> > error. Perhaps your config is revealing another bug which is being
> > improperly reported. Can you provide an example of the problematic config?
> >   
> 
> I tried to get the exact file that caused the problem but it is already
> destroyed by osstest.
> 
> A similar file:
> 
> http://logs.test-lab.xenproject.org/osstest/logs/115436/test-amd64-amd64-libvirt-pair/debian.guest.osstest.cfg
> 
> If you hexdump -C it, you can see the last character is 0a. Remove it and
> feed the file into the converter.
> Wei.

  The phenonomem you point out is indeed weird.  And my first response
  is that this is a bug parsing the cfg input.  I did little explore and
  think that src/util/virconf.c (virConfParseLong(), virConfParseValue()) 
  should be reworked as pointed out in below context diffs.

        <wtenhave@nina:140> git diff
        diff --git a/src/util/virconf.c b/src/util/virconf.c
        index 39c2bd917..bc8e57ec3 100644
        --- a/src/util/virconf.c
        +++ b/src/util/virconf.c
        @@ -352,7 +352,7 @@ virConfParseLong(virConfParserCtxtPtr ctxt, long 
long *val)
             } else if (CUR == '+') {
                 NEXT;
             }
        -    if ((ctxt->cur >= ctxt->end) || (!c_isdigit(CUR))) {
        +    if ((ctxt->cur > ctxt->end) || (!c_isdigit(CUR))) {
                 virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("unterminated 
number"));
                 return -1;
             }
        @@ -456,7 +456,7 @@ virConfParseValue(virConfParserCtxtPtr ctxt)
             long long l = 0;
         
             SKIP_BLANKS;
        -    if (ctxt->cur >= ctxt->end) {
        +    if (ctxt->cur > ctxt->end) {
                 virConfError(ctxt, VIR_ERR_CONF_SYNTAX, _("expecting a 
value"));
                 return NULL;
             }

  I did not go beyond this yet.

Rgds,
- Wim.

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.