[libvirt] [PATCH] dnsmasq: Fix parsing of the version number

Laine Stump laine at laine.org
Thu Dec 6 12:29:12 UTC 2012


On 12/06/2012 06:34 AM, Michal Privoznik wrote:
> If the debugging is enabled, the virCommand subsystem catches debug
> messages in the command output as well. In that case, we can't assume
> the string corresponding to command's stdout will start with specific
> prefix. But the prefix can be moved deeper in the string. This bug
> shows itself when parsing dnsmasq output:
>
> 2012-12-06 11:18:11.445+0000: 18491: error :
> dnsmasqCapsSetFromBuffer:664 : internal error cannot parse
> /usr/sbin/dnsmasq version number in '2012-12-06 11:11:02.232+0000:
> 18492: debug : virFileClose:72 : Closed fd 22'
>
> We can clearly see that the output of dnsmasq --version
> doesn't start with expected "Dnsmasq version " string but a libvirt
> debug output.

This is a bug in virCommand, and should also affect
qemuCapsParseHelpStr(). Is there no way to fix it at the source, rather
than working around it like this?


> ---
>  src/util/dnsmasq.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/util/dnsmasq.c b/src/util/dnsmasq.c
> index 4f210d2..de0293a 100644
> --- a/src/util/dnsmasq.c
> +++ b/src/util/dnsmasq.c
> @@ -641,9 +641,9 @@ dnsmasqCapsSetFromBuffer(dnsmasqCapsPtr caps, const char *buf)
>  
>      caps->noRefresh = true;
>  
> -    p = STRSKIP(buf, DNSMASQ_VERSION_STR);
> -    if (!p)
> +    if (!(p = strstr(buf, DNSMASQ_VERSION_STR)))
>         goto fail;
> +    p += sizeof(DNSMASQ_VERSION_STR) - 1;

Why -1 ? That happens to work, but wouldn't if the version string didn't
end with a space.

>      virSkipSpaces(&p);
>      if (virParseVersionString(p, &caps->version, true) < 0)
>          goto fail;

I'd rather make sure that nobody has a bright idea on how to fix
virCommand before pushing this.




More information about the libvir-list mailing list