From: Rafaël Carré Date: Sun, 30 Dec 2007 20:14:31 +0000 (+0000) Subject: fix #1421 X-Git-Tag: 0.9.0-test0~3792 X-Git-Url: https://git.videolan.org/gitweb.cgi/vlc.git/?p=vlc.git;p=vlc.git;a=commitdiff_plain;h=d8b4a5b6955d71125dcfb2579062d211fa186183;ds=sidebyside fix #1421 --- diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c index 101bd729b2..4b9c2b6994 100644 --- a/modules/demux/playlist/xspf.c +++ b/modules/demux/playlist/xspf.c @@ -125,9 +125,7 @@ int Demux( demux_t *p_demux ) { input_item_t *p_new_input = p_demux->p_sys->pp_tracklist[i]; if( p_new_input ) - { input_ItemAddSubItem( p_current_input, p_new_input, VLC_FALSE ); - } vlc_gc_decref( p_new_input ); } @@ -490,13 +488,9 @@ static vlc_bool_t parse_track_node COMPLEX_INTERFACE if( !strcmp( psz_name, psz_element ) ) { FREE_ATT(); - if( p_demux->p_sys->i_identifier < + if( p_demux->p_sys->i_identifier == -1 || + p_demux->p_sys->i_identifier == p_demux->p_sys->i_tracklist_entries ) - { - p_demux->p_sys->pp_tracklist[ - p_demux->p_sys->i_identifier ] = p_new_input; - } - else { if( p_demux->p_sys->i_identifier > p_demux->p_sys->i_tracklist_entries ) @@ -508,6 +502,13 @@ static vlc_bool_t parse_track_node COMPLEX_INTERFACE p_demux->p_sys->i_tracklist_entries, p_demux->p_sys->i_tracklist_entries, p_new_input ); + p_demux->p_sys->i_identifier = -1; + } + else + { + msg_Err( p_demux, "Invalid identifier %d", p_demux->p_sys->i_identifier ); + p_demux->p_sys->i_identifier = -1; + return VLC_FALSE; } return VLC_TRUE; } @@ -578,7 +579,8 @@ static vlc_bool_t parse_track_node COMPLEX_INTERFACE return VLC_FALSE; } } - else if( !strcmp( p_handler->name, "identifier" ) ) + else if( !strcmp( p_handler->name, "identifier" ) && + *psz_value >= '0' && *psz_value <= '9' ) { p_demux->p_sys->i_identifier = atoi( psz_value ); }