[vlc-commits] video_output/xcb: fix memory-leak in ReleaseDrawable

Filip Roséen git at videolan.org
Fri Sep 23 16:03:29 CEST 2016


vlc | branch: master | Filip Roséen <filip at atch.se> | Fri Sep 23 13:52:31 2016 +0200| [66dc09662ae33d44c21a5159885afdcaabb0cbb0] | committer: Thomas Guillem

video_output/xcb: fix memory-leak in ReleaseDrawable

The problem with the previous implementation is that "n" will never
be equal to 0 at the relevant part of the code (given the
unconditional pre-increment a few lines earlier).

These changes fixes the issue by freeing the allocated memory if the
first element of "used" is NULL (meaning that there are no more
entities referred to by it).

fixes #17112
fixes #17293

Signed-off-by: Thomas Guillem <thomas at gllm.fr>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=66dc09662ae33d44c21a5159885afdcaabb0cbb0
---

 modules/video_output/xcb/window.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/modules/video_output/xcb/window.c b/modules/video_output/xcb/window.c
index 02c9dd1..0c4f86f 100644
--- a/modules/video_output/xcb/window.c
+++ b/modules/video_output/xcb/window.c
@@ -538,12 +538,15 @@ static void ReleaseDrawable (vlc_object_t *obj, xcb_window_t window)
         used[n] = used[n + 1];
     while (used[++n]);
 
-    if (n == 0)
-         var_SetAddress (obj->obj.libvlc, "xid-in-use", NULL);
+    if (!used[0])
+        var_SetAddress (obj->obj.libvlc, "xid-in-use", NULL);
+    else
+        used = NULL;
+
     vlc_mutex_unlock (&serializer);
 
-    if (n == 0)
-        free (used);
+    free( used );
+
     /* Variables are reference-counted... */
     var_Destroy (obj->obj.libvlc, "xid-in-use");
 }



More information about the vlc-commits mailing list