[vlc-devel] [PATCH] variables: fix leak on non existent variable

Steve Lhomme robux4 at ycbcr.xyz
Wed Feb 13 09:28:50 CET 2019


On 12/02/2019 23:26, Francois Cartegnie wrote:
> ---
>   src/misc/variables.c | 15 +++++++++------
>   1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/src/misc/variables.c b/src/misc/variables.c
> index a07684c58a..5d28c3343b 100644
> --- a/src/misc/variables.c
> +++ b/src/misc/variables.c
> @@ -760,9 +760,9 @@ typedef enum
>       vlc_list_callback
>   } vlc_callback_type_t;
>   
> -static void AddCallback( vlc_object_t *p_this, const char *psz_name,
> -                         callback_entry_t *restrict entry,
> -                         vlc_callback_type_t i_type )
> +static int AddCallback( vlc_object_t *p_this, const char *psz_name,
> +                        callback_entry_t *restrict entry,
> +                        vlc_callback_type_t i_type )
>   {
>       variable_t *p_var;
>   
> @@ -776,7 +776,7 @@ static void AddCallback( vlc_object_t *p_this, const char *psz_name,
>           vlc_mutex_unlock( &p_priv->var_lock );
>           msg_Err( p_this, "cannot add callback %p to nonexistent variable '%s'",
>                    entry->p_callback, psz_name );

You could just free the entry here, since the current code assumes the 
ownership of the pointer is passed to AddCallback. That would be a one 
line fix.

> -        return;
> +        return VLC_EGENERIC;
>       }
>   
>       WaitUnused( p_this, p_var );
> @@ -792,6 +792,7 @@ static void AddCallback( vlc_object_t *p_this, const char *psz_name,
>       *pp = entry;
>   
>       vlc_mutex_unlock( &p_priv->var_lock );
> +    return VLC_SUCCESS;
>   }
>   
>   void (var_AddCallback)(vlc_object_t *p_this, const char *psz_name,
> @@ -801,7 +802,8 @@ void (var_AddCallback)(vlc_object_t *p_this, const char *psz_name,
>   
>       entry->pf_value_callback = pf_callback;
>       entry->p_data = p_data;
> -    AddCallback(p_this, psz_name, entry, vlc_value_callback);
> +    if( AddCallback(p_this, psz_name, entry, vlc_value_callback) )
> +        free( entry );
>   }
>   
>   static void DelCallback( vlc_object_t *p_this, const char *psz_name,
> @@ -879,7 +881,8 @@ void (var_AddListCallback)(vlc_object_t *p_this, const char *psz_name,
>   
>       entry->pf_list_callback = pf_callback;
>       entry->p_data = p_data;
> -    AddCallback(p_this, psz_name, entry, vlc_list_callback);
> +    if( AddCallback(p_this, psz_name, entry, vlc_list_callback) )
> +        free( entry );
>   }
>   
>   void (var_DelListCallback)(vlc_object_t *p_this, const char *psz_name,
> -- 
> 2.20.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list