[PATCH 08/17] virXMLPropInt: Always initialize '@result'

Michal Prívozník mprivozn at redhat.com
Thu May 6 17:07:59 UTC 2021


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 at 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




More information about the libvir-list mailing list