[PATCH 17/17] virXMLPropEnum: Always initialize '@result'

Peter Krempa pkrempa at redhat.com
Thu May 6 15:31:09 UTC 2021


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.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/util/virxml.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/src/util/virxml.c b/src/util/virxml.c
index 3ad596b3e2..8dcece704a 100644
--- a/src/util/virxml.c
+++ b/src/util/virxml.c
@@ -562,12 +562,15 @@ virXMLPropEnumInternal(xmlNodePtr node,
                        const char* name,
                        int (*strToInt)(const char*),
                        virXMLPropFlags flags,
-                       unsigned int *result)
+                       unsigned int *result,
+                       unsigned int defaultResult)

 {
     g_autofree char *tmp = NULL;
     int ret;

+    *result = defaultResult;
+
     if (!(tmp = virXMLPropString(node, name))) {
         if (!(flags & VIR_XML_PROP_REQUIRED))
             return 0;
@@ -615,10 +618,8 @@ virXMLPropTristateBool(xmlNodePtr node,
 {
     flags |= VIR_XML_PROP_NONZERO;

-    *result = VIR_TRISTATE_BOOL_ABSENT;
-
     return virXMLPropEnumInternal(node, name, virTristateBoolTypeFromString,
-                                  flags, result);
+                                  flags, result, VIR_TRISTATE_BOOL_ABSENT);
 }


@@ -645,10 +646,8 @@ virXMLPropTristateSwitch(xmlNodePtr node,
 {
     flags |= VIR_XML_PROP_NONZERO;

-    *result = VIR_TRISTATE_SWITCH_ABSENT;
-
     return virXMLPropEnumInternal(node, name, virTristateSwitchTypeFromString,
-                                  flags, result);
+                                  flags, result, VIR_TRISTATE_SWITCH_ABSENT);
 }


@@ -851,9 +850,7 @@ virXMLPropEnumDefault(xmlNodePtr node,
                       unsigned int *result,
                       unsigned int defaultResult)
 {
-    *result = defaultResult;
-
-    return virXMLPropEnumInternal(node, name, strToInt, flags, result);
+    return virXMLPropEnumInternal(node, name, strToInt, flags, result, defaultResult);
 }


@@ -867,6 +864,7 @@ virXMLPropEnumDefault(xmlNodePtr node,
  * @result: The returned value
  *
  * Convenience function to return value of an enum attribute.
+ * @result is initialized to 0 on error or if the element is not found.
  *
  * Returns 1 in case of success in which case @result is set,
  *         or 0 if the attribute is not present,
@@ -879,7 +877,7 @@ virXMLPropEnum(xmlNodePtr node,
                virXMLPropFlags flags,
                unsigned int *result)
 {
-    return virXMLPropEnumInternal(node, name, strToInt, flags, result);
+    return virXMLPropEnumInternal(node, name, strToInt, flags, result, 0);
 }


-- 
2.30.2




More information about the libvir-list mailing list