diff --git a/libavformat/hls.c b/libavformat/hls.c index c370b6ec0c6b24b05702005f78c096f629650fe0..daee8625afa8eaacae1fd2debd32c87dd54fbd21 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -494,6 +494,16 @@ static int save_avio_options(AVFormatContext *s) return ret; } +static int nested_io_open(AVFormatContext *s, AVIOContext **pb, const char *url, + int flags, AVDictionary **opts) +{ + av_log(s, AV_LOG_ERROR, + "A HLS playlist item '%s' referred to an external file '%s'. " + "Opening this file was forbidden for security reasons\n", + s->filename, url); + return AVERROR(EPERM); +} + static int hls_read_header(AVFormatContext *s) { HLSContext *c = s->priv_data; @@ -579,6 +589,7 @@ static int hls_read_header(AVFormatContext *s) goto fail; } v->ctx->pb = &v->pb; + v->ctx->io_open = nested_io_open; v->stream_offset = stream_offset; ret = avformat_open_input(&v->ctx, v->segments[0]->url, in_fmt, NULL); if (ret < 0)