char *http_proxy; ///< holds the address of the HTTP proxy server
AVDictionary *avio_opts;
int strict_std_compliance;
+ char *allowed_extensions;
} HLSContext;
static int read_chomp_line(AVIOContext *s, char *buf, int maxlen)
return AVERROR_INVALIDDATA;
// only http(s) & file are allowed
- if (!av_strstart(proto_name, "http", NULL) && !av_strstart(proto_name, "file", NULL))
+ if (av_strstart(proto_name, "file", NULL)) {
+ if (strcmp(c->allowed_extensions, "ALL") && !av_match_ext(url, c->allowed_extensions)) {
+ av_log(s, AV_LOG_ERROR,
+ "Filename extension of \'%s\' is not a common multimedia extension, blocked for security reasons.\n"
+ "If you wish to override this adjust allowed_extensions, you can set it to \'ALL\' to allow all\n",
+ url);
+ return AVERROR_INVALIDDATA;
+ }
+ } else if (av_strstart(proto_name, "http", NULL)) {
+ ;
+ } else
return AVERROR_INVALIDDATA;
+
if (!strncmp(proto_name, url, strlen(proto_name)) && url[strlen(proto_name)] == ':')
;
else if (av_strstart(url, "crypto", NULL) && !strncmp(proto_name, url + 7, strlen(proto_name)) && url[7 + strlen(proto_name)] == ':')
ret = s->io_open(s, pb, url, AVIO_FLAG_READ, &tmp);
if (ret >= 0) {
// update cookies on http response with setcookies.
- void *u = (s->flags & AVFMT_FLAG_CUSTOM_IO) ? NULL : s->pb;
- update_options(&c->cookies, "cookies", u);
+ char *new_cookies = NULL;
+
+ if (!(s->flags & AVFMT_FLAG_CUSTOM_IO))
+ av_opt_get(*pb, "cookies", AV_OPT_SEARCH_CHILDREN, (uint8_t**)&new_cookies);
+
+ if (new_cookies) {
+ av_free(c->cookies);
+ c->cookies = new_cookies;
+ }
+
av_dict_set(&opts, "cookies", c->cookies, 0);
}
}
pls->ctx->pb = &pls->pb;
pls->ctx->io_open = nested_io_open;
- pls->ctx->flags |= s->flags;
+ pls->ctx->flags |= s->flags & ~AVFMT_FLAG_CUSTOM_IO;
if ((ret = ff_copy_whiteblacklists(pls->ctx, s)) < 0)
goto fail;
static const AVOption hls_options[] = {
{"live_start_index", "segment index to start live streams at (negative values are from the end)",
OFFSET(live_start_index), AV_OPT_TYPE_INT, {.i64 = -3}, INT_MIN, INT_MAX, FLAGS},
+ {"allowed_extensions", "List of file extensions that hls is allowed to access",
+ OFFSET(allowed_extensions), AV_OPT_TYPE_STRING,
+ {.str = "3gp,aac,avi,flac,mkv,m3u8,m4a,m4s,m4v,mpg,mov,mp2,mp3,mp4,mpeg,mpegts,ogg,ogv,oga,ts,vob,wav"},
+ INT_MIN, INT_MAX, FLAGS},
{NULL}
};