This patch adds proper error reporting if parsing of cputune parameters
fails due to incorrect values provided by the user. Previously no errors
were reported in such a case and the failure was silently ignored.
---
v2: report errors instead of ignoring them
src/conf/domain_conf.c | 38 ++++++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 12 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ca645c7..1422b47 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9471,29 +9471,43 @@ virDomainDefParseXML(virCapsPtr caps,
/* Extract cpu tunables. */
if (virXPathULong("string(./cputune/shares[1])", ctxt,
- &def->cputune.shares) < 0)
- def->cputune.shares = 0;
+ &def->cputune.shares) < -1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("can't parse cputune shares value"));
+ goto error;
+ }
if (virXPathULongLong("string(./cputune/period[1])", ctxt,
- &def->cputune.period) < 0)
- def->cputune.period = 0;
+ &def->cputune.period) < -1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("can't parse cputune period value"));
+ goto error;
+ }
if (virXPathLongLong("string(./cputune/quota[1])", ctxt,
- &def->cputune.quota) < 0)
- def->cputune.quota = 0;
+ &def->cputune.quota) < -1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("can't parse cputune quota value"));
+ goto error;
+ }
if (virXPathULongLong("string(./cputune/emulator_period[1])", ctxt,
- &def->cputune.emulator_period) < 0)
- def->cputune.emulator_period = 0;
+ &def->cputune.emulator_period) < -1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("can't parse cputune emulator period value"));
+ goto error;
+ }
if (virXPathLongLong("string(./cputune/emulator_quota[1])", ctxt,
- &def->cputune.emulator_quota) < 0)
- def->cputune.emulator_quota = 0;
-
- if ((n = virXPathNodeSet("./cputune/vcpupin", ctxt, &nodes)) < 0) {
+ &def->cputune.emulator_quota) < -1) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("can't parse cputune emualtor quota value"));
goto error;
}
+ if ((n = virXPathNodeSet("./cputune/vcpupin", ctxt, &nodes)) < 0)
+ goto error;
+
if (n && VIR_ALLOC_N(def->cputune.vcpupin, n) < 0)
goto no_memory;
--
1.8.1.1