virNetworkDefParseXML(xmlXPathContextPtr ctxt)
{
virNetworkDefPtr def;
- char *tmp;
+ char *tmp = NULL;
char *stp = NULL;
xmlNodePtr *ipNodes = NULL;
xmlNodePtr *routeNodes = NULL;
}
} else {
if (virUUIDParse(tmp, def->uuid) < 0) {
- VIR_FREE(tmp);
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("malformed uuid element"));
goto error;
stp = virXPathString("string(./bridge[1]/@stp)", ctxt);
def->stp = (stp && STREQ(stp, "off")) ? false : true;
- if (virXPathULong("string(./bridge[1]/@delay)", ctxt, &def->delay) < 0)
- def->delay = 0;
+ tmp = virXPathString("string(./bridge[1]/@delay)", ctxt);
+ if (tmp) {
+ if (virStrToLong_ulp(tmp, NULL, 10, &def->delay) < 0) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("Invalid delay value in network '%s'"),
+ def->name);
+ goto error;
+ }
+ }
+ VIR_FREE(tmp);
tmp = virXPathString("string(./mac[1]/@address)", ctxt);
if (tmp) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid bridge mac address '%s' in network '%s'"),
tmp, def->name);
- VIR_FREE(tmp);
goto error;
}
if (virMacAddrIsMulticast(&def->mac)) {
virReportError(VIR_ERR_XML_ERROR,
_("Invalid multicast bridge mac address '%s' in network '%s'"),
tmp, def->name);
- VIR_FREE(tmp);
goto error;
}
VIR_FREE(tmp);
goto error;
/* parse each portgroup */
for (i = 0; i < nPortGroups; i++) {
- int ret = virNetworkPortGroupParseXML(&def->portGroups[i],
- portGroupNodes[i], ctxt);
- if (ret < 0)
+ if (virNetworkPortGroupParseXML(&def->portGroups[i],
+ portGroupNodes[i],
+ ctxt) < 0)
goto error;
def->nPortGroups++;
}
goto error;
/* parse each addr */
for (i = 0; i < nIps; i++) {
- int ret = virNetworkIPDefParseXML(def->name, ipNodes[i],
- ctxt, &def->ips[i]);
- if (ret < 0)
+ if (virNetworkIPDefParseXML(def->name,
+ ipNodes[i],
+ ctxt,
+ &def->ips[i]) < 0)
goto error;
def->nips++;
}
goto error;
/* parse each definition */
for (i = 0; i < nRoutes; i++) {
- int ret = virNetworkRouteDefParseXML(def->name, routeNodes[i],
- ctxt, &def->routes[i]);
- if (ret < 0)
+ if (virNetworkRouteDefParseXML(def->name,
+ routeNodes[i],
+ ctxt,
+ &def->routes[i]) < 0)
goto error;
def->nroutes++;
}
return def;
error:
+ VIR_FREE(tmp);
VIR_FREE(routeNodes);
VIR_FREE(stp);
virNetworkDefFree(def);