Commit 926cc392 authored by Rémi Duraffort's avatar Rémi Duraffort

video_filter_rss: sanitize error path (and fix a potential memleak).

parent 4bd3d7cd
...@@ -193,7 +193,7 @@ vlc_module_begin () ...@@ -193,7 +193,7 @@ vlc_module_begin ()
set_callbacks( CreateFilter, DestroyFilter ) set_callbacks( CreateFilter, DestroyFilter )
set_category( CAT_VIDEO ) set_category( CAT_VIDEO )
set_subcategory( SUBCAT_VIDEO_SUBPIC ) set_subcategory( SUBCAT_VIDEO_SUBPIC )
add_string( CFG_PREFIX "urls", "rss", NULL, MSG_TEXT, MSG_LONGTEXT, false ) add_string( CFG_PREFIX "urls", NULL, NULL, MSG_TEXT, MSG_LONGTEXT, false )
set_section( N_("Position"), NULL ) set_section( N_("Position"), NULL )
add_integer( CFG_PREFIX "x", 0, NULL, POSX_TEXT, POSX_LONGTEXT, true ) add_integer( CFG_PREFIX "x", 0, NULL, POSX_TEXT, POSX_LONGTEXT, true )
...@@ -237,7 +237,6 @@ static int CreateFilter( vlc_object_t *p_this ) ...@@ -237,7 +237,6 @@ static int CreateFilter( vlc_object_t *p_this )
{ {
filter_t *p_filter = (filter_t *)p_this; filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys; filter_sys_t *p_sys;
int i_ret = VLC_ENOMEM;
char *psz_urls; char *psz_urls;
int i_ttl; int i_ttl;
...@@ -249,6 +248,15 @@ static int CreateFilter( vlc_object_t *p_this ) ...@@ -249,6 +248,15 @@ static int CreateFilter( vlc_object_t *p_this )
config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options, config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options,
p_filter->p_cfg ); p_filter->p_cfg );
/* Get the urls to parse: must be non empty */
psz_urls = var_CreateGetNonEmptyString( p_filter, CFG_PREFIX "urls" );
if( !psz_urls )
{
msg_Err( p_filter, "The list of urls must not be empty" );
free( p_sys );
return VLC_EGENERIC;
}
/* Fill the p_sys structure with the configuration */ /* Fill the p_sys structure with the configuration */
p_sys->i_title = var_CreateGetInteger( p_filter, CFG_PREFIX "title" ); p_sys->i_title = var_CreateGetInteger( p_filter, CFG_PREFIX "title" );
p_sys->i_cur_feed = 0; p_sys->i_cur_feed = 0;
...@@ -261,11 +269,14 @@ static int CreateFilter( vlc_object_t *p_this ) ...@@ -261,11 +269,14 @@ static int CreateFilter( vlc_object_t *p_this )
p_sys->b_images = var_CreateGetBool( p_filter, CFG_PREFIX "images" ); p_sys->b_images = var_CreateGetBool( p_filter, CFG_PREFIX "images" );
i_ttl = __MAX( 0, var_CreateGetInteger( p_filter, CFG_PREFIX "ttl" ) ); i_ttl = __MAX( 0, var_CreateGetInteger( p_filter, CFG_PREFIX "ttl" ) );
psz_urls = var_CreateGetString( p_filter, CFG_PREFIX "urls" );
p_sys->psz_marquee = malloc( p_sys->i_length + 1 ); p_sys->psz_marquee = malloc( p_sys->i_length + 1 );
if( p_sys->psz_marquee == NULL ) if( p_sys->psz_marquee == NULL )
goto error; {
free( psz_urls );
free( p_sys );
return VLC_ENOMEM;
}
p_sys->psz_marquee[p_sys->i_length] = '\0'; p_sys->psz_marquee[p_sys->i_length] = '\0';
p_sys->p_style = text_style_New(); p_sys->p_style = text_style_New();
...@@ -286,11 +297,7 @@ static int CreateFilter( vlc_object_t *p_this ) ...@@ -286,11 +297,7 @@ static int CreateFilter( vlc_object_t *p_this )
/* Parse the urls */ /* Parse the urls */
if( ParseUrls( p_filter, psz_urls ) ) if( ParseUrls( p_filter, psz_urls ) )
{
free( psz_urls );
goto error; goto error;
}
free( psz_urls );
/* Misc init */ /* Misc init */
vlc_mutex_init( &p_sys->lock ); vlc_mutex_init( &p_sys->lock );
...@@ -307,12 +314,16 @@ static int CreateFilter( vlc_object_t *p_this ) ...@@ -307,12 +314,16 @@ static int CreateFilter( vlc_object_t *p_this )
vlc_timer_schedule( p_sys->timer, false, 1, vlc_timer_schedule( p_sys->timer, false, 1,
(mtime_t)(i_ttl)*1000000 ); (mtime_t)(i_ttl)*1000000 );
free( psz_urls );
return VLC_SUCCESS; return VLC_SUCCESS;
error: error:
if( p_sys->p_style )
text_style_Delete( p_sys->p_style );
free( p_sys->psz_marquee ); free( p_sys->psz_marquee );
free( psz_urls );
free( p_sys ); free( p_sys );
return i_ret; return VLC_ENOMEM;
} }
/***************************************************************************** /*****************************************************************************
* DestroyFilter: destroy RSS video filter * DestroyFilter: destroy RSS video filter
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment