From: Peter Krempa Date: Fri, 26 Aug 2022 11:56:48 +0000 (+0200) Subject: virDomainControllerDefParseXML: Return early if there's unexpectedly many elements X-Git-Tag: v8.8.0-rc1~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b61854baf278af15c26bf3895d42e09ebe40b385;p=thirdparty%2Flibvirt.git virDomainControllerDefParseXML: Return early if there's unexpectedly many elements Move some checks earlier so that they are not tucked at the back of the block of code doing the actual parsing. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 32305d8cbf..6db608431a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -8181,7 +8181,12 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, return NULL; } - nmodelNodes = virXPathNodeSet("./model", ctxt, &modelNodes); + if ((nmodelNodes = virXPathNodeSet("./model", ctxt, &modelNodes)) > 1) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Multiple elements in controller definition not allowed")); + return NULL; + } + if (nmodelNodes == 1) { if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) { if (virXMLPropEnum(modelNodes[0], "name", @@ -8190,14 +8195,14 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, &def->opts.pciopts.modelName) < 0) return NULL; } - } else if (nmodelNodes > 1) { + } + + if ((ntargetNodes = virXPathNodeSet("./target", ctxt, &targetNodes)) > 1) { virReportError(VIR_ERR_XML_ERROR, "%s", - _("Multiple elements in " - "controller definition not allowed")); + _("Multiple elements in controller definition not allowed")); return NULL; } - ntargetNodes = virXPathNodeSet("./target", ctxt, &targetNodes); if (ntargetNodes == 1) { if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) { if (virXMLPropInt(targetNodes[0], "chassisNr", 0, VIR_XML_PROP_NONE, @@ -8230,11 +8235,6 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt, def->opts.pciopts.targetIndex) < 0) return NULL; } - } else if (ntargetNodes > 1) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("Multiple elements in " - "controller definition not allowed")); - return NULL; } /* node is parsed differently from target attributes because