From d3081ffff71448139a319259179e365846b711a2 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Sat, 17 Jan 2009 18:37:14 +0100 Subject: [PATCH] Force to specify options flags in input_item_New*. It previously assumed TRUSTED. No functionnal/security changes in this commit. --- include/vlc_input_item.h | 12 ++++++++---- modules/access/cdda.c | 2 +- modules/demux/mp4/mp4.c | 2 +- modules/demux/playlist/asx.c | 3 ++- modules/demux/playlist/b4s.c | 2 +- modules/demux/playlist/dvb.c | 2 +- modules/demux/playlist/gvp.c | 2 +- modules/demux/playlist/ifo.c | 2 +- modules/demux/playlist/itml.c | 2 +- modules/demux/playlist/m3u.c | 2 +- modules/demux/playlist/pls.c | 4 ++-- modules/demux/playlist/podcast.c | 2 +- modules/demux/playlist/qtl.c | 4 ++-- modules/demux/playlist/sgimb.c | 2 +- modules/demux/playlist/shoutcast.c | 4 ++-- modules/demux/playlist/xspf.c | 4 ++-- modules/gui/qt4/dialogs_provider.cpp | 2 +- modules/misc/lua/vlc.c | 1 + modules/services_discovery/bonjour.c | 2 +- modules/services_discovery/podcast.c | 2 +- modules/services_discovery/sap.c | 2 +- modules/services_discovery/shout.c | 2 +- src/control/media_list.c | 2 +- src/input/item.c | 6 ++++-- src/playlist/item.c | 7 ++++--- src/playlist/loadsave.c | 6 +++--- src/playlist/tree.c | 2 +- 27 files changed, 47 insertions(+), 38 deletions(-) diff --git a/include/vlc_input_item.h b/include/vlc_input_item.h index bfacb54aa2..938cf121c2 100644 --- a/include/vlc_input_item.h +++ b/include/vlc_input_item.h @@ -177,9 +177,13 @@ VLC_EXPORT( char *, input_item_GetInfo, ( input_item_t *p_i, const char *psz_cat VLC_EXPORT( int, input_item_AddInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) LIBVLC_FORMAT( 4, 5 ) ); VLC_EXPORT( int, input_item_DelInfo, ( input_item_t *p_i, const char *psz_cat, const char *psz_name ) ); -#define input_item_New( a,b,c ) input_item_NewExt( a, b, c, 0, NULL, -1 ) -#define input_item_NewExt(a,b,c,d,e,f) __input_item_NewExt( VLC_OBJECT(a),b,c,d,e,f) -VLC_EXPORT( input_item_t *, __input_item_NewExt, (vlc_object_t *, const char *, const char*, int, const char *const *, mtime_t i_duration ) ); -VLC_EXPORT( input_item_t *, input_item_NewWithType, ( vlc_object_t *, const char *, const char *e, int, const char *const *, mtime_t i_duration, int ) ); +#define input_item_New( a,b,c ) input_item_NewExt( a, b, c, 0, NULL, 0, -1 ) +#define input_item_NewExt(a,b,c,d,e,f,g) __input_item_NewExt( VLC_OBJECT(a),b,c,d,e,f,g) +VLC_EXPORT( input_item_t *, __input_item_NewExt, (vlc_object_t *, const char *, const char*, int, const char *const *, unsigned, mtime_t i_duration ) ); + +/** + * This function creates a new input_item_t with the provided informations. + */ +VLC_EXPORT( input_item_t *, input_item_NewWithType, ( vlc_object_t *, const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration, int i_type ) ); #endif diff --git a/modules/access/cdda.c b/modules/access/cdda.c index 03b3f3c3fb..e6fd6fab8a 100644 --- a/modules/access/cdda.c +++ b/modules/access/cdda.c @@ -437,7 +437,7 @@ static int GetTracks( access_t *p_access, input_item_t *p_current ) /* Create playlist items */ p_input_item = input_item_NewWithType( VLC_OBJECT( p_access ), - psz_uri, psz_name, 0, NULL, -1, + psz_uri, psz_name, 0, NULL, 0, -1, ITEM_TYPE_DISC ); input_item_CopyOptions( p_current, p_input_item ); input_item_AddOption( p_input_item, psz_first, VLC_INPUT_OPTION_TRUSTED ); diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index 4154cb5c58..10e9fe07a1 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -417,7 +417,7 @@ static int Open( vlc_object_t * p_this ) } msg_Dbg( p_demux, "adding ref = `%s'", psz_ref ); input_item_t *p_input = input_item_NewExt( p_demux, psz_ref - , NULL, 0, NULL, -1 ); + , NULL, 0, NULL, 0, -1 ); input_item_CopyOptions( p_current, p_input ); input_item_AddSubItem( p_current, p_input ); vlc_gc_decref( p_input ); diff --git a/modules/demux/playlist/asx.c b/modules/demux/playlist/asx.c index 53a3d26ef0..030c3410cd 100644 --- a/modules/demux/playlist/asx.c +++ b/modules/demux/playlist/asx.c @@ -528,7 +528,8 @@ static int Demux( demux_t *p_demux ) char *psz_current_input_name = input_item_GetName( p_current_input ); if( asprintf( &psz_name, "%d %s", i_entry_count, ( psz_title_entry ? psz_title_entry : psz_current_input_name ) ) != -1 ) { - p_entry = input_item_NewExt( p_demux, psz_href, psz_name, i_options, (const char * const *)ppsz_options, -1 ); + p_entry = input_item_NewExt( p_demux, psz_href, psz_name, + i_options, (const char * const *)ppsz_options, VLC_INPUT_OPTION_TRUSTED, -1 ); free( psz_name ); input_item_CopyOptions( p_current_input, p_entry ); while( i_options ) diff --git a/modules/demux/playlist/b4s.c b/modules/demux/playlist/b4s.c index c463c65181..87b44b931c 100644 --- a/modules/demux/playlist/b4s.c +++ b/modules/demux/playlist/b4s.c @@ -262,7 +262,7 @@ static int Demux( demux_t *p_demux ) if( !strcmp( psz_elname, "entry" ) ) { p_input = input_item_NewExt( p_demux, psz_mrl, psz_name, - 0, NULL, -1 ); + 0, NULL, 0, -1 ); if( psz_now ) input_item_SetNowPlaying( p_input, psz_now ); if( psz_genre ) diff --git a/modules/demux/playlist/dvb.c b/modules/demux/playlist/dvb.c index 94d901ad73..dac8629494 100644 --- a/modules/demux/playlist/dvb.c +++ b/modules/demux/playlist/dvb.c @@ -117,7 +117,7 @@ static int Demux( demux_t *p_demux ) EnsureUTF8( psz_name ); - p_input = input_item_NewExt( p_demux, "dvb://", psz_name, 0, NULL, -1 ); + p_input = input_item_NewExt( p_demux, "dvb://", psz_name, 0, NULL, 0, -1 ); for( i = 0; i< i_options; i++ ) { EnsureUTF8( ppsz_options[i] ); diff --git a/modules/demux/playlist/gvp.c b/modules/demux/playlist/gvp.c index e66b95fc4a..bd4537bba2 100644 --- a/modules/demux/playlist/gvp.c +++ b/modules/demux/playlist/gvp.c @@ -203,7 +203,7 @@ static int Demux( demux_t *p_demux ) else { p_input = input_item_NewExt( p_demux, - psz_url, psz_title, 0, NULL, -1 ); + psz_url, psz_title, 0, NULL, 0, -1 ); #define SADD_INFO( type, field ) if( field ) { input_item_AddInfo( \ p_input, _("Google Video"), _(type), "%s", field ) ; } SADD_INFO( "gvp_version", psz_version ); diff --git a/modules/demux/playlist/ifo.c b/modules/demux/playlist/ifo.c index 058da35778..246bfbaaca 100644 --- a/modules/demux/playlist/ifo.c +++ b/modules/demux/playlist/ifo.c @@ -95,7 +95,7 @@ static int Demux( demux_t *p_demux ) psz_url = (char *)malloc( len+1 ); snprintf( psz_url, len+1, "dvd://%s", p_demux->psz_path ); - p_input = input_item_NewExt( p_demux, psz_url, psz_url, 0, NULL, -1 ); + p_input = input_item_NewExt( p_demux, psz_url, psz_url, 0, NULL, 0, -1 ); input_item_AddSubItem( p_current_input, p_input ); vlc_gc_decref( p_input ); diff --git a/modules/demux/playlist/itml.c b/modules/demux/playlist/itml.c index 44e8dd5276..32a234b3f3 100644 --- a/modules/demux/playlist/itml.c +++ b/modules/demux/playlist/itml.c @@ -381,7 +381,7 @@ static bool parse_track_dict COMPLEX_INTERFACE msg_Info( p_demux, "Adding '%s'", psz_uri ); p_new_input = input_item_NewExt( p_demux, psz_uri, - NULL, 0, NULL, -1 ); + NULL, 0, NULL, 0, -1 ); input_item_AddSubItem( p_input_item, p_new_input ); /* add meta info */ diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c index 2f0bf7fa7e..09c99a0fec 100644 --- a/modules/demux/playlist/m3u.c +++ b/modules/demux/playlist/m3u.c @@ -218,7 +218,7 @@ static int Demux( demux_t *p_demux ) if( !psz_mrl ) goto error; p_input = input_item_NewExt( p_demux, psz_mrl, psz_name, - 0, NULL, i_duration ); + 0, NULL, 0, i_duration ); if ( psz_artist && *psz_artist ) input_item_SetArtist( p_input, psz_artist ); diff --git a/modules/demux/playlist/pls.c b/modules/demux/playlist/pls.c index 099f5c3748..56f8f1d84e 100644 --- a/modules/demux/playlist/pls.c +++ b/modules/demux/playlist/pls.c @@ -160,7 +160,7 @@ static int Demux( demux_t *p_demux ) if( psz_mrl ) { p_input = input_item_NewExt( p_demux, psz_mrl, psz_name, - 0, NULL, -1 ); + 0, NULL, 0, -1 ); input_item_CopyOptions( p_current_input, p_input ); input_item_AddSubItem( p_current_input, p_input ); vlc_gc_decref( p_input ); @@ -215,7 +215,7 @@ static int Demux( demux_t *p_demux ) /* Add last object */ if( psz_mrl ) { - p_input = input_item_NewExt( p_demux, psz_mrl, psz_name,0, NULL, -1 ); + p_input = input_item_NewExt( p_demux, psz_mrl, psz_name,0, NULL, 0, -1 ); input_item_CopyOptions( p_current_input, p_input ); input_item_AddSubItem( p_current_input, p_input ); vlc_gc_decref( p_input ); diff --git a/modules/demux/playlist/podcast.c b/modules/demux/playlist/podcast.c index c33eb13393..eed0008b6c 100644 --- a/modules/demux/playlist/podcast.c +++ b/modules/demux/playlist/podcast.c @@ -292,7 +292,7 @@ static int Demux( demux_t *p_demux ) return -1; } p_input = input_item_NewExt( p_demux, psz_item_mrl, - psz_item_name, 0, NULL, -1 ); + psz_item_name, 0, NULL, 0, -1 ); if( p_input == NULL ) break; #define ADD_INFO( info, field ) \ if( field ) { input_item_AddInfo( p_input, \ diff --git a/modules/demux/playlist/qtl.c b/modules/demux/playlist/qtl.c index 778608765b..d947bab8da 100644 --- a/modules/demux/playlist/qtl.c +++ b/modules/demux/playlist/qtl.c @@ -350,7 +350,7 @@ static int Demux( demux_t *p_demux ) else { p_input = input_item_NewExt( p_demux, - psz_src, psz_moviename, 0, NULL, -1 ); + psz_src, psz_moviename, 0, NULL, 0, -1 ); #define SADD_INFO( type, field ) if( field ) { input_item_AddInfo( \ p_input, "QuickTime Media Link", _(type), "%s", field ) ; } SADD_INFO( "href", psz_href ); @@ -360,7 +360,7 @@ static int Demux( demux_t *p_demux ) if( psz_qtnext ) { p_input = input_item_NewExt( p_demux, - psz_qtnext, NULL, 0, NULL, -1 ); + psz_qtnext, NULL, 0, NULL, 0, -1 ); input_item_AddSubItem( p_current_input, p_input ); vlc_gc_decref( p_input ); } diff --git a/modules/demux/playlist/sgimb.c b/modules/demux/playlist/sgimb.c index da40f03309..c83e604297 100644 --- a/modules/demux/playlist/sgimb.c +++ b/modules/demux/playlist/sgimb.c @@ -378,7 +378,7 @@ static int Demux ( demux_t *p_demux ) p_child = input_item_NewWithType( VLC_OBJECT(p_demux), p_sys->psz_uri, p_sys->psz_name ? p_sys->psz_name : p_sys->psz_uri, - 0, NULL, p_sys->i_duration, ITEM_TYPE_NET ); + 0, NULL, 0, p_sys->i_duration, ITEM_TYPE_NET ); if( !p_child ) { diff --git a/modules/demux/playlist/shoutcast.c b/modules/demux/playlist/shoutcast.c index d3686c13e2..c56c58ddbb 100644 --- a/modules/demux/playlist/shoutcast.c +++ b/modules/demux/playlist/shoutcast.c @@ -229,7 +229,7 @@ static int DemuxGenre( demux_t *p_demux ) psz_name ) != -1 ) { p_input = input_item_NewExt( p_demux, psz_mrl, - psz_name, 0, NULL, -1 ); + psz_name, 0, NULL, 0, -1 ); input_item_CopyOptions( p_sys->p_current_input, p_input ); free( psz_mrl ); input_item_AddSubItem( p_sys->p_current_input, p_input ); @@ -400,7 +400,7 @@ static int DemuxStation( demux_t *p_demux ) psz_mrl = NULL; } p_input = input_item_NewExt( p_demux, psz_mrl, - psz_name , 0, NULL, -1 ); + psz_name , 0, NULL, 0, -1 ); free( psz_mrl ); input_item_CopyOptions( p_sys->p_current_input, diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c index 852db24a78..c42eece055 100644 --- a/modules/demux/playlist/xspf.c +++ b/modules/demux/playlist/xspf.c @@ -416,7 +416,7 @@ static bool parse_track_node COMPLEX_INTERFACE {NULL, UNKNOWN_CONTENT, {NULL} } }; - input_item_t *p_new_input = input_item_NewExt( p_demux, NULL, NULL, 0, NULL, -1 ); + input_item_t *p_new_input = input_item_NewExt( p_demux, NULL, NULL, 0, NULL, 0, -1 ); if( !p_new_input ) { @@ -737,7 +737,7 @@ static bool parse_extension_node COMPLEX_INTERFACE return false; } p_new_input = input_item_NewWithType( VLC_OBJECT( p_demux ), - "vlc://nop", psz_title, 0, NULL, -1, + "vlc://nop", psz_title, 0, NULL, 0, -1, ITEM_TYPE_DIRECTORY ); if( p_new_input ) { diff --git a/modules/gui/qt4/dialogs_provider.cpp b/modules/gui/qt4/dialogs_provider.cpp index cde5e5f544..fb30054899 100644 --- a/modules/gui/qt4/dialogs_provider.cpp +++ b/modules/gui/qt4/dialogs_provider.cpp @@ -438,7 +438,7 @@ static void openDirectory( intf_thread_t *p_intf, bool pl, bool go ) QString mrl = dir.endsWith( "VIDEO_TS", Qt::CaseInsensitive ) ? "dvd://" : "directory://" + toNativeSeparators( dir ); input_item_t *p_input = input_item_NewExt( THEPL, qtu( mrl ), - NULL, 0, NULL, -1 ); + NULL, 0, NULL, 0, -1 ); /* FIXME: playlist_AddInput() can fail */ playlist_AddInput( THEPL, p_input, diff --git a/modules/misc/lua/vlc.c b/modules/misc/lua/vlc.c index 7e9c701ee4..5f386fd697 100644 --- a/modules/misc/lua/vlc.c +++ b/modules/misc/lua/vlc.c @@ -436,6 +436,7 @@ int __vlclua_playlist_add_internal( vlc_object_t *p_this, lua_State *L, p_input = input_item_NewExt( p_playlist, psz_path, psz_name, i_options, (const char **)ppsz_options, + VLC_INPUT_OPTION_TRUSTED, i_duration ); lua_pop( L, 3 ); /* pop "path name item" */ /* playlist key item */ diff --git a/modules/services_discovery/bonjour.c b/modules/services_discovery/bonjour.c index 5c7f8405cd..0cb7459360 100644 --- a/modules/services_discovery/bonjour.c +++ b/modules/services_discovery/bonjour.c @@ -175,7 +175,7 @@ static void resolve_callback( if( psz_uri != NULL ) { - p_input = input_item_NewExt( p_sd, psz_uri, name, 0, NULL, -1 ); + p_input = input_item_NewExt( p_sd, psz_uri, name, 0, NULL, 0, -1 ); free( (void *)psz_uri ); } if( p_input != NULL ) diff --git a/modules/services_discovery/podcast.c b/modules/services_discovery/podcast.c index f4dc5a297d..74fdc1abf9 100644 --- a/modules/services_discovery/podcast.c +++ b/modules/services_discovery/podcast.c @@ -246,7 +246,7 @@ static void ParseUrls( services_discovery_t *p_sd, char *psz_urls ) INSERT_ELEM( p_sys->ppsz_urls, p_sys->i_urls, p_sys->i_urls, strdup( psz_urls ) ); p_input = input_item_NewExt( p_sd, psz_urls, - psz_urls, 0, NULL, -1 ); + psz_urls, 0, NULL, 0, -1 ); input_item_AddOption( p_input, "demux=podcast", VLC_INPUT_OPTION_TRUSTED ); services_discovery_AddItem( p_sd, p_input, NULL /* no cat */ ); vlc_gc_decref( p_input ); diff --git a/modules/services_discovery/sap.c b/modules/services_discovery/sap.c index ebe2bf4c95..6eda5808a6 100644 --- a/modules/services_discovery/sap.c +++ b/modules/services_discovery/sap.c @@ -867,7 +867,7 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash, p_input = input_item_NewWithType( VLC_OBJECT(p_sd), p_sap->p_sdp->psz_uri, p_sdp->psz_sessionname, - 0, NULL, -1, ITEM_TYPE_NET ); + 0, NULL, 0, -1, ITEM_TYPE_NET ); p_sap->p_item = p_input; if( !p_input ) { diff --git a/modules/services_discovery/shout.c b/modules/services_discovery/shout.c index d74b2cb531..b82fd647f3 100644 --- a/modules/services_discovery/shout.c +++ b/modules/services_discovery/shout.c @@ -188,7 +188,7 @@ static input_item_t * CreateInputItemFromShoutItem( services_discovery_t *p_sd, /* Create the item */ input_item_t *p_input = input_item_NewExt( p_sd, p_item->psz_url, _(p_item->psz_name), - 0, NULL, -1 ); + 0, NULL, 0, -1 ); /* Copy options */ for( i = 0; p_item->ppsz_options[i] != NULL; i++ ) diff --git a/src/control/media_list.c b/src/control/media_list.c index 2eae4971ab..5b9d6f5ed8 100644 --- a/src/control/media_list.c +++ b/src/control/media_list.c @@ -223,7 +223,7 @@ libvlc_media_list_add_file_content( libvlc_media_list_t * p_mlist, libvlc_media_t * p_md; p_input_item = input_item_NewExt( p_mlist->p_libvlc_instance->p_libvlc_int, psz_uri, - _("Media Library"), 0, NULL, -1 ); + _("Media Library"), 0, NULL, 0, -1 ); if( !p_input_item ) { diff --git a/src/input/item.c b/src/input/item.c index d561522ab5..55a5b8fc49 100644 --- a/src/input/item.c +++ b/src/input/item.c @@ -627,10 +627,11 @@ input_item_t *__input_item_NewExt( vlc_object_t *p_obj, const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, + unsigned i_option_flags, mtime_t i_duration ) { return input_item_NewWithType( p_obj, psz_uri, psz_name, - i_options, ppsz_options, + i_options, ppsz_options, i_option_flags, i_duration, ITEM_TYPE_UNKNOWN ); } @@ -639,6 +640,7 @@ input_item_t *input_item_NewWithType( vlc_object_t *p_obj, const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, + unsigned i_option_flags, mtime_t i_duration, int i_type ) { @@ -672,7 +674,7 @@ input_item_t *input_item_NewWithType( vlc_object_t *p_obj, const char *psz_uri, p_input->i_duration = i_duration; for( int i = 0; i < i_options; i++ ) - input_item_AddOption( p_input, ppsz_options[i], VLC_INPUT_OPTION_TRUSTED ); + input_item_AddOption( p_input, ppsz_options[i], i_option_flags ); return p_input; } diff --git a/src/playlist/item.c b/src/playlist/item.c index 780ebfc59f..8c85d2a5ca 100644 --- a/src/playlist/item.c +++ b/src/playlist/item.c @@ -193,8 +193,9 @@ playlist_item_t * playlist_ItemNewWithType( playlist_t *p_playlist, input_item_t *p_input; if( psz_uri == NULL ) return NULL; p_input = input_item_NewWithType( VLC_OBJECT(p_playlist), psz_uri, - psz_name, i_options, ppsz_options, - i_duration, i_type ); + psz_name, + i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED, + i_duration, i_type ); return playlist_ItemNewFromInput( p_playlist, p_input ); } @@ -386,7 +387,7 @@ int playlist_AddExt( playlist_t *p_playlist, const char * psz_uri, { int i_ret; input_item_t *p_input = input_item_NewExt( p_playlist, psz_uri, psz_name, - i_options, ppsz_options, + i_options, ppsz_options, VLC_INPUT_OPTION_TRUSTED, i_duration ); i_ret = playlist_AddInput( p_playlist, p_input, i_mode, i_pos, b_playlist, diff --git a/src/playlist/loadsave.c b/src/playlist/loadsave.c index bdde7dd855..2fc19c04a7 100644 --- a/src/playlist/loadsave.c +++ b/src/playlist/loadsave.c @@ -102,7 +102,7 @@ int playlist_Import( playlist_t *p_playlist, const char *psz_file ) return VLC_EGENERIC; p_input = input_item_NewExt( p_playlist, psz_uri, psz_file, - 1, &psz_option, -1 ); + 1, &psz_option, VLC_INPUT_OPTION_TRUSTED, -1 ); free( psz_uri ); playlist_AddInput( p_playlist, p_input, PLAYLIST_APPEND, PLAYLIST_END, @@ -162,8 +162,8 @@ int playlist_MLLoad( playlist_t *p_playlist ) const char *const psz_option = "meta-file"; /* that option has to be cleaned in input_item_subitem_added() */ /* vlc_gc_decref() in the same function */ - p_input = input_item_NewExt( p_playlist, psz_uri, - _("Media Library"), 1, &psz_option, -1 ); + p_input = input_item_NewExt( p_playlist, psz_uri, _("Media Library"), + 1, &psz_option, VLC_INPUT_OPTION_TRUSTED, -1 ); if( p_input == NULL ) goto error; diff --git a/src/playlist/tree.c b/src/playlist/tree.c index e6d23c9817..ed16eb911c 100644 --- a/src/playlist/tree.c +++ b/src/playlist/tree.c @@ -67,7 +67,7 @@ playlist_item_t * playlist_NodeCreate( playlist_t *p_playlist, if( !p_input ) p_new_input = input_item_NewWithType( VLC_OBJECT(p_playlist), NULL, - psz_name, 0, NULL, -1, ITEM_TYPE_NODE ); + psz_name, 0, NULL, 0, -1, ITEM_TYPE_NODE ); p_item = playlist_ItemNewFromInput( p_playlist, p_input ? p_input : p_new_input ); if( p_new_input ) -- 2.39.2