On 07/01/2011 07:25 AM, Eric Blake wrote: > To avoid regressions, we let callers specify whether to require a > micro version. Callers that were parsing uname() output benefit > from the defaults, whereas callers that were parsing version strings > from other sources should not change in behavior. > > * src/util/util.c (virParseVersionString): Allow caller to choose > whether to fail if micro is missing. > * src/util/util.h (virParseVersionString): Update signature. > * src/esx/esx_driver.c (esxGetVersion): Update callers. > * src/lxc/lxc_driver.c (lxcVersion): Likewise. > * src/openvz/openvz_conf.c (openvzExtractVersionInfo): Likewise. > * src/uml/uml_driver.c (umlGetVersion): Likewise. > * src/vbox/vbox_MSCOMGlue.c (vboxLookupVersionInRegistry): > Likewise. > * src/vbox/vbox_tmpl.c (vboxExtractVersion): Likewise. > * src/vmware/vmware_conf.c (vmwareExtractVersion): Likewise. > * src/xenapi/xenapi_driver.c (xenapiGetVersion): Likewise. > Reported by Matthias Bolte. I plan to squash this in (I figured it was easier to show this diff than to send a full v2): diff --git i/src/util/util.c w/src/util/util.c index 8e12e5f..6e1f4f5 100644 --- i/src/util/util.c +++ w/src/util/util.c @@ -1619,6 +1619,9 @@ virParseVersionString(const char *str, unsigned long *version, if ((*tmp == '.') && virStrToLong_ui(tmp + 1, &tmp, 10, µ) < 0) return -1; + if (major > ULONG_MAX / 1000000 || minor > 999 || micro > 999) + return -1; + *version = 1000000 * major + 1000 * minor + micro; return 0; -- Eric Blake eblake@xxxxxxxxxx +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list