]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
xenParseXLUSBController: Avoid use of virStrncpy
authorPeter Krempa <pkrempa@redhat.com>
Tue, 2 Mar 2021 13:04:42 +0000 (14:04 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 11 Mar 2021 17:00:35 +0000 (18:00 +0100)
Use g_strndup with a freed buffer instead of the more complex approach
using virStrncpy.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/libxl/xen_xl.c

index 9b2a2fe292be2452c179b3410df758a29f9a86d1..1bce31a5496879f672d5aa028b0670ef5817983c 100644 (file)
@@ -885,16 +885,11 @@ xenParseXLUSBController(virConfPtr conf, virDomainDefPtr def)
     if (list && list->type == VIR_CONF_LIST) {
         list = list->list;
         while (list) {
-            char type[8];
-            char version[4];
-            char ports[4];
             char *key;
             int usbctrl_version = 2; /* by default USB 2.0 */
             int usbctrl_ports = 8; /* by default 8 ports */
             int usbctrl_type = -1;
 
-            type[0] = version[0] = ports[0] = '\0';
-
             if ((list->type != VIR_CONF_STRING) || (list->str == NULL))
                 goto skipusbctrl;
             /* usbctrl=['type=pv,version=2,ports=8'] */
@@ -908,32 +903,19 @@ xenParseXLUSBController(virConfPtr conf, virDomainDefPtr def)
                 data++;
 
                 if (STRPREFIX(key, "type=")) {
-                    int len = nextkey ? (nextkey - data) : strlen(data);
-                    if (virStrncpy(type, data, len, sizeof(type)) < 0) {
-                        virReportError(VIR_ERR_INTERNAL_ERROR,
-                                       _("type %s invalid"),
-                                       data);
+                    if (!STRPREFIX(data, "qusb"))
                         goto skipusbctrl;
-                    }
                 } else if (STRPREFIX(key, "version=")) {
                     int len = nextkey ? (nextkey - data) : strlen(data);
-                    if (virStrncpy(version, data, len, sizeof(version)) < 0) {
-                        virReportError(VIR_ERR_INTERNAL_ERROR,
-                                       _("version %s invalid"),
-                                       data);
-                        goto skipusbctrl;
-                    }
-                    if (virStrToLong_i(version, NULL, 16, &usbctrl_version) < 0)
+                    g_autofree char *tmp = g_strndup(data, len);
+
+                    if (virStrToLong_i(tmp, NULL, 16, &usbctrl_version) < 0)
                         goto skipusbctrl;
                 } else if (STRPREFIX(key, "ports=")) {
                     int len = nextkey ? (nextkey - data) : strlen(data);
-                    if (virStrncpy(ports, data, len, sizeof(ports)) < 0) {
-                        virReportError(VIR_ERR_INTERNAL_ERROR,
-                                       _("version %s invalid"),
-                                       data);
-                        goto skipusbctrl;
-                    }
-                    if (virStrToLong_i(ports, NULL, 16, &usbctrl_ports) < 0)
+                    g_autofree char *tmp = g_strndup(data, len);
+
+                    if (virStrToLong_i(tmp, NULL, 16, &usbctrl_ports) < 0)
                         goto skipusbctrl;
                 }
 
@@ -944,21 +926,10 @@ xenParseXLUSBController(virConfPtr conf, virDomainDefPtr def)
                 key = nextkey;
             }
 
-            if (type[0] == '\0') {
-                if (usbctrl_version == 1)
-                    usbctrl_type = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1;
-                else
-                    usbctrl_type = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2;
-            } else {
-                if (STRPREFIX(type, "qusb")) {
-                    if (usbctrl_version == 1)
-                        usbctrl_type = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1;
-                    else
-                        usbctrl_type = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2;
-                } else {
-                    goto skipusbctrl;
-                }
-            }
+            if (usbctrl_version == 1)
+                usbctrl_type = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB1;
+            else
+                usbctrl_type = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2;
 
             if (!(controller = virDomainControllerDefNew(VIR_DOMAIN_CONTROLLER_TYPE_USB)))
                 return -1;