diff options
author | wm4 <wm4@nowhere> | 2014-08-31 19:49:39 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-08-31 19:49:39 +0200 |
commit | 866e0e1670f79653203a3da65096841ab37fc903 (patch) | |
tree | 2c01331832dc0be8d77954936f1e590a6d2728a4 /stream/stream.c | |
parent | fc0fa9a221882647da563acc2d22eac0f27b1120 (diff) | |
download | mpv-866e0e1670f79653203a3da65096841ab37fc903.tar.bz2 mpv-866e0e1670f79653203a3da65096841ab37fc903.tar.xz |
player: always load playlists
Until now, you had to use --load-unsafe-playlists or --playlist to get
playlists loaded. Change this and always load playlists by default.
This still attempts to reject unsafe URLs. For example, trying to invoke
libavdevice pseudo-demuxer is explicitly prevented. Local paths and any
http links (and some more) are always allowed.
Diffstat (limited to 'stream/stream.c')
-rw-r--r-- | stream/stream.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/stream/stream.c b/stream/stream.c index cfb3cb6c82..226626cf3c 100644 --- a/stream/stream.c +++ b/stream/stream.c @@ -61,6 +61,7 @@ extern const stream_info_t stream_info_null; extern const stream_info_t stream_info_memory; extern const stream_info_t stream_info_mf; extern const stream_info_t stream_info_ffmpeg; +extern const stream_info_t stream_info_ffmpeg_unsafe; extern const stream_info_t stream_info_avdevice; extern const stream_info_t stream_info_file; extern const stream_info_t stream_info_ifo; @@ -77,6 +78,7 @@ static const stream_info_t *const stream_list[] = { &stream_info_cdda, #endif &stream_info_ffmpeg, + &stream_info_ffmpeg_unsafe, &stream_info_avdevice, #if HAVE_DVBIN &stream_info_dvb, @@ -257,6 +259,8 @@ static int open_internal(const stream_info_t *sinfo, struct stream *underlying, return STREAM_NO_MATCH; if (sinfo->stream_filter && (flags & STREAM_NO_FILTERS)) return STREAM_NO_MATCH; + if (!sinfo->is_safe && (flags & STREAM_SAFE_ONLY)) + return STREAM_UNSAFE; const char *path = NULL; // Stream filters use the original URL, with no protocol matching at all. @@ -335,18 +339,30 @@ struct stream *stream_create(const char *url, int flags, struct mpv_global *glob assert(url); // Open stream proper + bool unsafe = false; for (int i = 0; stream_list[i]; i++) { int r = open_internal(stream_list[i], NULL, url, flags, global, &s); if (r == STREAM_OK) break; if (r == STREAM_NO_MATCH || r == STREAM_UNSUPPORTED) continue; + if (r == STREAM_UNSAFE) { + unsafe = true; + continue; + } if (r != STREAM_OK) { mp_err(log, "Failed to open %s.\n", url); goto done; } } + if (!s && unsafe) { + mp_err(log, "\nRefusing to load potentially unsafe URL from a playlist.\n" + "Use --playlist=file or the --load-unsafe-playlists option to " + "load it anyway.\n\n"); + goto done; + } + if (!s) { mp_err(log, "No stream found to handle url %s\n", url); goto done; |