This strictens the parser to disallow negative values (interpreted as
`ULLONG_MAX + value + 1`) for attribute `reg`. Allowing negative
numbers to be interpreted this way makes no sense for this attribute, as it
refers to a 32 bit address space.
Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
src/conf/device_conf.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
index 034f072df4..e587d90c59 100644
--- a/src/conf/device_conf.c
+++ b/src/conf/device_conf.c
@@ -417,19 +417,17 @@ int
virDomainDeviceSpaprVioAddressParseXML(xmlNodePtr node,
virDomainDeviceSpaprVioAddress *addr)
{
- g_autofree char *reg = virXMLPropString(node, "reg");
+ int reg;
memset(addr, 0, sizeof(*addr));
- if (reg) {
- if (virStrToLong_ull(reg, NULL, 16, &addr->reg) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
- _("Cannot parse <address> 'reg'
attribute"));
- return -1;
- }
+ if ((reg = virXMLPropULongLong(node, "reg", 16, VIR_XML_PROP_NONE,
+ &addr->reg)) < 0)
+ return -1;
+ if (reg != 0)
addr->has_reg = true;
- }
+
return 0;
}
--
2.26.3