[libvirt PATCH 07/10] virDomainChrDefParseTargetXML: Use virXMLProp*

Tim Wiederhake twiederh at redhat.com
Tue May 18 15:04:48 UTC 2021


This strictens the parser to disallow negative values (interpreted as
`UINT_MAX + value + 1`) for attribute `port`. Allowing negative
numbers to be interpreted this way makes no sense for this attribute.

Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
---
 src/conf/domain_conf.c | 29 +++++------------------------
 1 file changed, 5 insertions(+), 24 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index a5514660cc..57a54f12ef 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10977,7 +10977,6 @@ virDomainChrDefParseTargetXML(virDomainChrDef *def,
     g_autofree char *targetModel = NULL;
     g_autofree char *addrStr = NULL;
     g_autofree char *portStr = NULL;
-    g_autofree char *stateStr = NULL;
     VIR_XPATH_NODE_AUTORESTORE(ctxt)
 
     ctxt->node = cur;
@@ -11007,7 +11006,6 @@ virDomainChrDefParseTargetXML(virDomainChrDef *def,
         switch (def->targetType) {
         case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
             addrStr = virXMLPropString(cur, "address");
-            portStr = virXMLPropString(cur, "port");
 
             def->target.addr = g_new0(virSocketAddr, 1);
 
@@ -11028,19 +11026,8 @@ virDomainChrDefParseTargetXML(virDomainChrDef *def,
                 return -1;
             }
 
-            if (portStr == NULL) {
-                virReportError(VIR_ERR_XML_ERROR, "%s",
-                               _("guestfwd channel does "
-                                 "not define a target port"));
-                return -1;
-            }
-
-            if (virStrToLong_ui(portStr, NULL, 10, &port) < 0) {
-                virReportError(VIR_ERR_XML_ERROR,
-                               _("Invalid port number: %s"),
-                               portStr);
+            if (virXMLPropUInt(cur, "port", 10, VIR_XML_PROP_REQUIRED, &port) < 0)
                 return -1;
-            }
 
             virSocketAddrSetPort(def->target.addr, port);
             break;
@@ -11050,18 +11037,12 @@ virDomainChrDefParseTargetXML(virDomainChrDef *def,
             def->target.name = virXMLPropString(cur, "name");
 
             if (def->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
-                !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE) &&
-                (stateStr = virXMLPropString(cur, "state"))) {
-                int tmp;
+                !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)) {
 
-                if ((tmp = virDomainChrDeviceStateTypeFromString(stateStr)) <= 0) {
-                    virReportError(VIR_ERR_XML_ERROR,
-                                   _("invalid channel state value '%s'"),
-                                   stateStr);
+                if (virXMLPropEnum(cur, "state",
+                                   virDomainChrDeviceStateTypeFromString,
+                                   VIR_XML_PROP_NONZERO, &def->state) < 0)
                     return -1;
-                }
-
-                def->state = tmp;
             }
             break;
         }
-- 
2.26.3




More information about the libvir-list mailing list