From ad22a4a41fa28a2e6bb90f9ec4d72b6c10e58926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net> Date: Mon, 25 Aug 2014 21:02:37 +0300 Subject: [PATCH] shoutcast: fix NULL deref on error --- modules/demux/playlist/shoutcast.c | 42 ++++++++++++++++++------------ 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/modules/demux/playlist/shoutcast.c b/modules/demux/playlist/shoutcast.c index a7d7afc0b384..499ba3d08fef 100644 --- a/modules/demux/playlist/shoutcast.c +++ b/modules/demux/playlist/shoutcast.c @@ -314,28 +314,36 @@ static int DemuxStation( demux_t *p_demux, xml_reader_t *p_xml_reader, } /* Create the item */ - input_item_t *p_input; - resolve_xml_special_chars( psz_mrl ); - p_input = input_item_New( psz_mrl, psz_name ); - input_item_CopyOptions( p_input_node->p_item, p_input ); - free( psz_mrl ); + input_item_t *p_input = NULL; + + if( likely(psz_mrl != NULL) ) + { + resolve_xml_special_chars( psz_mrl ); + p_input = input_item_New( psz_mrl, psz_name ); + free( psz_mrl ); + } + + if( likely(p_input != NULL) ) + { + input_item_CopyOptions( p_input_node->p_item, p_input ); #define SADD_INFO( type, field ) \ if( field ) \ input_item_AddInfo( p_input, _("Shoutcast"), \ vlc_gettext(type), "%s", field ) - SADD_INFO( N_("Mime"), psz_mt ); - SADD_INFO( N_("Bitrate"), psz_br ); - SADD_INFO( N_("Listeners"), psz_lc ); - SADD_INFO( N_("Load"), psz_load ); - if( psz_genre ) - input_item_SetGenre( p_input, psz_genre ); - if( psz_ct ) - input_item_SetNowPlaying( p_input, psz_ct ); - if( psz_rt ) - input_item_SetRating( p_input, psz_rt ); - input_item_node_AppendItem( p_input_node, p_input ); - vlc_gc_decref( p_input ); + SADD_INFO( N_("Mime"), psz_mt ); + SADD_INFO( N_("Bitrate"), psz_br ); + SADD_INFO( N_("Listeners"), psz_lc ); + SADD_INFO( N_("Load"), psz_load ); + if( psz_genre ) + input_item_SetGenre( p_input, psz_genre ); + if( psz_ct ) + input_item_SetNowPlaying( p_input, psz_ct ); + if( psz_rt ) + input_item_SetRating( p_input, psz_rt ); + input_item_node_AppendItem( p_input_node, p_input ); + vlc_gc_decref( p_input ); + } FREENULL( psz_base ); FREENULL( psz_name ); FREENULL( psz_mt ); -- GitLab