vlc | branch: master | Filip Roséen <[email protected]> | 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 <[email protected]>

> 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");
 }

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to