[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