[libvirt] [PATCH] virconf: properly set the end of content

Daniel P. Berrange berrange at redhat.com
Wed Nov 8 08:56:07 UTC 2017


On Tue, Nov 07, 2017 at 03:37:46PM -0700, Jim Fehlig wrote:
> There was a recent report of the xen-xl converter not handling
> config files missing an ending newline
> 
> https://www.redhat.com/archives/libvir-list/2017-October/msg01353.html
> 
> Commit 3cc2a9e0 fixed a similar problem when parsing content of a
> file but missed parsing in-memory content. But AFAICT, the better
> fix is to properly set the end of the content when initializing the
> virConfParserCtxt in virConfParse().
> 
> This commit reverts the part of 3cc2a9e0 that appends a newline to
> files missing it, and fixes setting the end of content when
> initializing virConfParserCtxt.
> 
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
>  src/util/virconf.c | 13 ++-----------
>  1 file changed, 2 insertions(+), 11 deletions(-)

Could you try to extend  tests/virconftest.c to cover in-memory
content for this newline scenario too.

> 
> diff --git a/src/util/virconf.c b/src/util/virconf.c
> index 39c2bd917..a82a509ca 100644
> --- a/src/util/virconf.c
> +++ b/src/util/virconf.c
> @@ -705,7 +705,7 @@ virConfParse(const char *filename, const char *content, int len,
>  
>      ctxt.filename = filename;
>      ctxt.base = ctxt.cur = content;
> -    ctxt.end = content + len - 1;
> +    ctxt.end = content + len;
>      ctxt.line = 1;
>  
>      ctxt.conf = virConfCreate(filename, flags);
> @@ -745,7 +745,7 @@ virConfReadFile(const char *filename, unsigned int flags)
>  {
>      char *content;
>      int len;
> -    virConfPtr conf = NULL;
> +    virConfPtr conf;
>  
>      VIR_DEBUG("filename=%s", NULLSTR(filename));
>  
> @@ -757,17 +757,8 @@ virConfReadFile(const char *filename, unsigned int flags)
>      if ((len = virFileReadAll(filename, MAX_CONFIG_FILE_SIZE, &content)) < 0)
>          return NULL;
>  
> -    if (len && len < MAX_CONFIG_FILE_SIZE && content[len - 1] != '\n') {
> -        VIR_DEBUG("appending newline to busted config file %s", filename);
> -        if (VIR_REALLOC_N(content, len + 2) < 0)
> -            goto cleanup;
> -        content[len++] = '\n';
> -        content[len] = '\0';
> -    }
> -
>      conf = virConfParse(filename, content, len, flags);
>  
> - cleanup:
>      VIR_FREE(content);
>  
>      return conf;
> -- 
> 2.14.2
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list