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. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list