On 04/18/2012 08:14 PM, Eric Blake wrote:
https://bugzilla.redhat.com/show_bug.cgi?id=617711 reported that even with my recent patched to allow<memory unit='G'>1</memory>, people can still get away with trying<memory>1G</memory> and silently get<memory unit='KiB'>1</memory> instead. While virt-xml-validate catches the error, our C parser was not. I always love it when I can reduce lines of code while fixing bugs. * src/conf/domain_conf.c (virDomainDefParseXML): Avoid strtoll. * src/conf/storage_conf.c (virStorageDefParsePerms): Likewise. * src/util/xml.c (virXPathLongBase, virXPathULongBase) (virXPathULongLong, virXPathLongLong): Likewise. --- src/conf/domain_conf.c | 12 +++++------- src/conf/storage_conf.c | 6 +++--- src/util/xml.c | 36 ++++-------------------------------- 3 files changed, 12 insertions(+), 42 deletions(-) index 2330fa1..64cc0cd 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -570,14 +570,14 @@ virStorageDefParsePerms(xmlXPathContextPtr ctxt, if (!mode) { perms->mode = defaultmode; } else { - char *end = NULL; - perms->mode = strtol(mode,&end, 8); - if (*end || (perms->mode& ~0777)) { + int tmp;
Nit: empty line after var decl? > + if (virStrToLong_i(mode, NULL, 8, &tmp) < 0 || (tmp & ~0777)) { [...] @@ -465,15 +444,8 @@ virXPathLongLong(const char *xpath,
ctxt->node = relnode; if ((obj != NULL)&& (obj->type == XPATH_STRING)&& (obj->stringval != NULL)&& (obj->stringval[0] != 0)) { - char *conv = NULL; - unsigned long long val; - - val = strtoll((const char *) obj->stringval,&conv, 10); - if (conv == (const char *) obj->stringval) { + if (virStrToLong_ll((char *) obj->stringval, NULL, 10, value)< 0) ret = -2; - } else { - *value = val; - } } else if ((obj != NULL)&& (obj->type == XPATH_NUMBER)&& (!(isnan(obj->floatval)))) { *value = (long long) obj->floatval;
Again there was pattern to it :-) ACK -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list