[vlc-devel] [PATCH 1/2] libvlc: deactivate the playlist before destroying the preparser

Thomas Guillem thomas at gllm.fr
Tue Aug 23 09:45:21 CEST 2016


This fixes a use-after-free when the art fetcher was triggering a callback
registered by the playlist (that was destroyed).

This partially reverts 17bd88b915188d1659ec46c07aa1efd3745071b5 that is a
revert of 9e9b227443831d8c9798b78122a2194053f2b2f1.

Fixes #17087
---
 src/libvlc.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/libvlc.c b/src/libvlc.c
index 48c2b8c..8bd736c 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -508,6 +508,14 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 {
     libvlc_priv_t *priv = libvlc_priv (p_libvlc);
 
+    /* Deactivate the playlist before deleting the preparser in order to
+     * prevent new preparser requests from the playlist */
+    if (priv->playlist)
+        playlist_Deactivate(priv->playlist);
+
+    if (priv->parser != NULL)
+        playlist_preparser_Delete(priv->parser);
+
     /* Ask the interfaces to stop and destroy them */
     msg_Dbg( p_libvlc, "removing all interfaces" );
     libvlc_Quit( p_libvlc );
@@ -536,9 +544,6 @@ void libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     }
 #endif
 
-    if (priv->parser != NULL)
-        playlist_preparser_Delete(priv->parser);
-
     vlc_DeinitActions( p_libvlc, priv->actions );
 
     /* Save the configuration */
-- 
2.8.1



More information about the vlc-devel mailing list