On 5/6/21 5:31 PM, Peter Krempa wrote:
Compilers aren't able to see whether @result is set or not and
thus
don't warn of a potential use of uninitialized value. Always set @result
to prevent uninitialized use.
This is done by adding a @defaultResult argument to virXMLPropInt since
many places have a non-0 default.
In certain cases such as in virDomainControllerDefParseXML we pass the
value from the original value, which will still trigger compiler checks
if unused while preserving the existing functionality of keeping the
previous value.
This commit fixes 3 uses of uninitialized value parsed by this function:
in virDomainDiskSourceNetworkParse introduced by 38dc25989c5
in virDomainChrSourceDefParseTCP introduced by fa48004af5b
in virDomainGraphicsListenDefParseXML introduced by 0b20fd3754c
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 57 +++++++++++++++++++++---------------------
src/util/virxml.c | 6 ++++-
src/util/virxml.h | 3 ++-
3 files changed, 36 insertions(+), 30 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 78775bb2b3..2bc2e55ee4 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8221,7 +8221,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
if (flags & VIR_DOMAIN_DEF_PARSE_STATUS) {
int value;
if (virXMLPropInt(node, "tlsFromConfig", 10, VIR_XML_PROP_NONE,
- &value) < 0)
+ &value, 0) < 0)
return -1;
src->tlsFromConfig = !!value;
}
@@ -9414,7 +9414,7 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt,
g_autofree xmlNodePtr *modelNodes = NULL;
int nmodelNodes = 0;
int numaNode = -1;
- int ports = -1;
+ int ports;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
int rc;
g_autofree char *idx = NULL;
@@ -9494,19 +9494,23 @@ virDomainControllerDefParseXML(virDomainXMLOption *xmlopt,
if (ntargetNodes == 1) {
if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
if (virXMLPropInt(targetNodes[0], "chassisNr", 0, VIR_XML_PROP_NONE,
- &def->opts.pciopts.chassisNr) < 0)
+ &def->opts.pciopts.chassisNr,
+ def->opts.pciopts.chassisNr) < 0)
Ugrh, but I don't think there's much better option, unless we are
willing to turn virXMLPropInt() into a macro. Something like:
#define virXMLPropInt(node, name, base, flags, result) \
(virXMLPropIntImpl(node, name, base, flags, result, *result))
That way, virXMLPropInt() would stay in line with other virXMLPropXXX
functions which do not take the 6th argument and just force the default.
Michal