From 775bb9b15f0a60d265e442b45fa837c864cf2db6 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Rouault Date: Wed, 9 Apr 2014 11:59:53 +0200 Subject: [PATCH] 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. --- src/vmware/vmware_conf.c | 10 ++++++++-- tests/vmwareverdata/workstation-7.0.0-with-garbage.txt | 3 +++ tests/vmwarevertest.c | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 tests/vmwareverdata/workstation-7.0.0-with-garbage.txt 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; -- GitLab