]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
domain_conf.c: do not leak 'video' in virDomainDefParseXML()
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Thu, 19 Nov 2020 16:57:43 +0000 (13:57 -0300)
committerDaniel Henrique Barboza <danielhb413@gmail.com>
Tue, 1 Dec 2020 22:27:17 +0000 (19:27 -0300)
The 'video' pointer is only being freed on error path, meaning
that we're leaking it after each loop restart.

There are more opportunities for auto cleanups of virDomainVideoDef
pointers, so let's register AUTOPTR_CLEANUP_FUNC for it to use
g_autoptr() later on.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
src/conf/domain_conf.c
src/conf/domain_conf.h

index 5304d9e580b44cd20fb0022d99fab6823f03066f..c37c67962c3ced017bc54d14156d2c6bb9cca54b 100644 (file)
@@ -22211,7 +22211,7 @@ virDomainDefParseXML(xmlDocPtr xml,
     if (n)
         def->videos = g_new0(virDomainVideoDefPtr, n);
     for (i = 0; i < n; i++) {
-        virDomainVideoDefPtr video;
+        g_autoptr(virDomainVideoDef) video = NULL;
         ssize_t insertAt = -1;
 
         if (!(video = virDomainVideoDefParseXML(xmlopt, nodes[i],
@@ -22220,7 +22220,6 @@ virDomainDefParseXML(xmlDocPtr xml,
 
         if (video->primary) {
             if (def->nvideos != 0 && def->videos[0]->primary) {
-                virDomainVideoDefFree(video);
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                                _("Only one primary video device is supported"));
                 goto error;
@@ -22232,7 +22231,6 @@ virDomainDefParseXML(xmlDocPtr xml,
                                        insertAt,
                                        def->nvideos,
                                        video) < 0) {
-            virDomainVideoDefFree(video);
             goto error;
         }
     }
index 96e6c34553a5b1004019699bf50983cee5efe1a4..ff82da7f7e5b091eefe4dded3374213ae3c19610 100644 (file)
@@ -3083,6 +3083,7 @@ void virDomainNVRAMDefFree(virDomainNVRAMDefPtr def);
 void virDomainWatchdogDefFree(virDomainWatchdogDefPtr def);
 virDomainVideoDefPtr virDomainVideoDefNew(virDomainXMLOptionPtr xmlopt);
 void virDomainVideoDefFree(virDomainVideoDefPtr def);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVideoDef, virDomainVideoDefFree);
 void virDomainVideoDefClear(virDomainVideoDefPtr def);
 virDomainHostdevDefPtr virDomainHostdevDefNew(void);
 void virDomainHostdevDefClear(virDomainHostdevDefPtr def);