]> git.sesse.net Git - vlc/commitdiff
video_filter: fix a potential crash (callback called when
authorRémi Duraffort <ivoire@videolan.org>
Wed, 25 Mar 2009 20:42:41 +0000 (21:42 +0100)
committerRémi Duraffort <ivoire@videolan.org>
Thu, 26 Mar 2009 11:01:23 +0000 (12:01 +0100)
p_sys members are destroyed).

modules/video_filter/alphamask.c
modules/video_filter/bluescreen.c
modules/video_filter/rotate.c
modules/video_filter/sharpen.c

index bdc6132fad53885e955d98a29ccb0a7ed745959a..79999cda566a7e21210623cdc16d1e1af07a9987 100644 (file)
@@ -133,11 +133,14 @@ static void Destroy( vlc_object_t *p_this )
     filter_t *p_filter = (filter_t *)p_this;
     filter_sys_t *p_sys = p_filter->p_sys;
 
+    var_DelCallback( p_filter, CFG_PREFIX "mask", MaskCallback,
+                     p_filter );
+
     vlc_mutex_destroy( &p_sys->mask_lock );
-    if( p_filter->p_sys->p_mask )
-        picture_Release( p_filter->p_sys->p_mask );
+    if( p_sys->p_mask )
+        picture_Release( p_sys->p_mask );
 
-    free( p_filter->p_sys );
+    free( p_sys );
 }
 
 static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
index 61f07a40e1f948c1d47ad69836f13d420efb4dd3..e2b4442007db9e03a20a077019272dff3f3f11cd 100644 (file)
@@ -140,6 +140,7 @@ static int Create( vlc_object_t *p_this )
     GET_VAR( ut, 0x00, 0xff );
     GET_VAR( vt, 0x00, 0xff );
     p_sys->p_at = NULL;
+#undef GET_VAR
 
     p_filter->pf_video_filter = Filter;
 
@@ -149,9 +150,15 @@ static int Create( vlc_object_t *p_this )
 static void Destroy( vlc_object_t *p_this )
 {
     filter_t *p_filter = (filter_t *)p_this;
+    filter_sys_t *p_sys = p_filter->p_sys;
+
+    var_DelCallback( p_filter, CFG_PREFIX "u", BluescreenCallback, p_sys );
+    var_DelCallback( p_filter, CFG_PREFIX "v", BluescreenCallback, p_sys );
+    var_DelCallback( p_filter, CFG_PREFIX "ut", BluescreenCallback, p_sys );
+    var_DelCallback( p_filter, CFG_PREFIX "vt", BluescreenCallback, p_sys );
 
-    free( p_filter->p_sys->p_at );
-    free( p_filter->p_sys );
+    free( p_sys->p_at );
+    free( p_sys );
 }
 
 static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
index 95dcbb3f4300b45184d16126f241290031d22d02..8a0873e0c8749d054e05925dded8bd55051432a5 100644 (file)
@@ -157,6 +157,10 @@ static void Destroy( vlc_object_t *p_this )
 {
     filter_t *p_filter = (filter_t *)p_this;
 
+    var_DelCallback( p_filter, FILTER_PREFIX "angle", RotateCallback, p_filter->p_sys );
+    var_DelCallback( p_filter, FILTER_PREFIX "deciangle",
+                     PreciseRotateCallback, p_filter->p_sys );
+
     free( p_filter->p_sys );
 }
 
index 636d687d9e5ded1e3f77042a13f0d175ec6dc3e1..ce7fdd9a9f6fc731bec53e45b9a08c656f9989a6 100644 (file)
@@ -147,6 +147,8 @@ static int Create( vlc_object_t *p_this )
 static void Destroy( vlc_object_t *p_this )
 {
     filter_t *p_filter = (filter_t *)p_this;
+    var_DelCallback( p_filter, FILTER_PREFIX "sigma",
+                     SharpenCallback, p_filter->p_sys );
     free( p_filter->p_sys );
 }