From: Jean-Baptiste Rouault Date: Wed, 9 Apr 2014 09:59:53 +0000 (+0200) Subject: vmware: make version parsing more robust X-Git-Tag: v1.2.6-rc1~145 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=775bb9b15f0a60d265e442b45fa837c864cf2db6;p=thirdparty%2Flibvirt.git vmware: make version parsing more robust Since commit d69415d4, vmware version is parsed from both stdout and stderr. This patch makes version parsing work even if there is garbage (libvirt debug messages for example) in the command output. Add test data for this case. --- diff --git a/src/vmware/vmware_conf.c b/src/vmware/vmware_conf.c index 29ca322a0d..b77330313b 100644 --- a/src/vmware/vmware_conf.c +++ b/src/vmware/vmware_conf.c @@ -1,7 +1,7 @@ /*---------------------------------------------------------------------------*/ /* * Copyright (C) 2011-2014 Red Hat, Inc. - * Copyright 2010, diateam (www.diateam.net) + * Copyright (C) 2010-2014, diateam (www.diateam.net) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -241,7 +241,13 @@ vmwareParseVersionStr(int type, const char *verbuf, unsigned long *version) return -1; } - if ((tmp = STRSKIP(verbuf, pattern)) == NULL) { + if ((tmp = strstr(verbuf, pattern)) == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("cannot find version pattern \"%s\""), pattern); + return -1; + } + + if ((tmp = STRSKIP(tmp, pattern)) == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to parse %sversion"), pattern); return -1; diff --git a/tests/vmwareverdata/workstation-7.0.0-with-garbage.txt b/tests/vmwareverdata/workstation-7.0.0-with-garbage.txt new file mode 100644 index 0000000000..b3c8085291 --- /dev/null +++ b/tests/vmwareverdata/workstation-7.0.0-with-garbage.txt @@ -0,0 +1,3 @@ +garbage line +VMware Workstation 7.0.0 build-203739 Release +garbage line diff --git a/tests/vmwarevertest.c b/tests/vmwarevertest.c index 16e48deed0..24de9e1251 100644 --- a/tests/vmwarevertest.c +++ b/tests/vmwarevertest.c @@ -88,6 +88,7 @@ mymain(void) } while (0) DO_TEST("ws", "workstation-7.0.0", 7000000); + DO_TEST("ws", "workstation-7.0.0-with-garbage", 7000000); DO_TEST("fusion", "fusion-5.0.3", 5000003); return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;