diff options
Diffstat (limited to 'vlc-2.2.6-fix-memleak.patch')
-rw-r--r-- | vlc-2.2.6-fix-memleak.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vlc-2.2.6-fix-memleak.patch b/vlc-2.2.6-fix-memleak.patch new file mode 100644 index 000000000000..de5c1ac153b2 --- /dev/null +++ b/vlc-2.2.6-fix-memleak.patch @@ -0,0 +1,48 @@ +From 66dc09662ae33d44c21a5159885afdcaabb0cbb0 Mon Sep 17 00:00:00 2001 +From: =?utf8?q?Filip=20Ros=C3=A9en?= <filip@atch.se> +Date: Fri, 23 Sep 2016 13:52:31 +0200 +Subject: [PATCH] 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@gllm.fr> +--- + 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 02c9dd11e3..0c4f86f68c 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->p_libvlc, "xid-in-use", NULL); ++ if (!used[0]) ++ var_SetAddress (obj->p_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"); + } +-- +2.11.0 + |