]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: Restore error checking in VideoAccelDefParseXML()
authorAndrea Bolognani <abologna@redhat.com>
Thu, 24 Mar 2022 19:15:54 +0000 (20:15 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Tue, 5 Apr 2022 11:40:31 +0000 (13:40 +0200)
The check that ensures that at least one property among accel3d,
accel2d and rendernode has been provided by the user had been
lost during the conversion to virXMLPropTristateBool().

Fixes: 0fe2d8dd335054fae38b46bbbac58a4662e1a1d0
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/domain_conf.c

index 5140f71dda761135f76e47070f66b3421d0edc92..98df54e78cb079edad715f846eaa45719e6566a9 100644 (file)
@@ -14025,23 +14025,31 @@ virDomainVideoAccelDefParseXML(xmlNodePtr node)
 {
     g_autofree virDomainVideoAccelDef *def = NULL;
     g_autofree char *rendernode = NULL;
+    virTristateBool accel3d;
+    virTristateBool accel2d;
 
     rendernode = virXMLPropString(node, "rendernode");
-
-    def = g_new0(virDomainVideoAccelDef, 1);
-
     if (virXMLPropTristateBool(node, "accel3d",
-                               VIR_XML_PROP_NONE,
-                               &def->accel3d) < 0)
+                               VIR_XML_PROP_NONE, &accel3d) < 0)
         return NULL;
-
     if (virXMLPropTristateBool(node, "accel2d",
-                               VIR_XML_PROP_NONE,
-                               &def->accel2d) < 0)
+                               VIR_XML_PROP_NONE, &accel2d) < 0)
         return NULL;
 
+    if (!rendernode &&
+        accel3d == VIR_TRISTATE_BOOL_ABSENT &&
+        accel2d == VIR_TRISTATE_BOOL_ABSENT) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                _("missing values for acceleration"));
+        return NULL;
+    }
+
+    def = g_new0(virDomainVideoAccelDef, 1);
+
     if (rendernode)
         def->rendernode = virFileSanitizePath(rendernode);
+    def->accel3d = accel3d;
+    def->accel2d = accel2d;
 
     return g_steal_pointer(&def);
 }