aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Liu <lq@chinaffmpeg.org>2020-05-28 10:41:26 +0800
committerSteven Liu <lq@chinaffmpeg.org>2020-06-10 09:22:29 +0800
commitea1940c6e2ead234f6e563c095bb67d352e3328f (patch)
treefe97e767eb1a7d4a9368bc102eeec2f96351ccfd
parent029ff31af6801dd2bca1b543575e17eaaa6b0772 (diff)
downloadffmpeg-ea1940c6e2ead234f6e563c095bb67d352e3328f.tar.gz
avformat/hls: check output string is usable of ff_make_absolute_url
fix ticket: 8688 should goto failed workflow if cannot get usable string by ff_make_absolute_url Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
-rw-r--r--libavformat/hls.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c
index 3e35d157ad..3ca6b90b19 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -311,6 +311,8 @@ static struct playlist *new_playlist(HLSContext *c, const char *url,
return NULL;
reset_packet(&pls->pkt);
ff_make_absolute_url(pls->url, sizeof(pls->url), base, url);
+ if (!pls->url[0])
+ return NULL;
pls->seek_timestamp = AV_NOPTS_VALUE;
pls->is_id3_timestamped = -1;
@@ -416,6 +418,10 @@ static struct segment *new_init_section(struct playlist *pls,
ptr = info->uri;
} else {
ff_make_absolute_url(tmp_str, sizeof(tmp_str), url_base, info->uri);
+ if (!tmp_str[0]) {
+ av_free(sec);
+ return NULL;
+ }
}
sec->url = av_strdup(ptr);
if (!sec->url) {
@@ -841,6 +847,11 @@ static int parse_playlist(HLSContext *c, const char *url,
if (key_type != KEY_NONE) {
ff_make_absolute_url(tmp_str, sizeof(tmp_str), url, key);
+ if (!tmp_str[0]) {
+ av_free(cur_init_section);
+ ret = AVERROR_INVALIDDATA;
+ goto fail;
+ }
cur_init_section->key = av_strdup(tmp_str);
if (!cur_init_section->key) {
av_free(cur_init_section);
@@ -895,6 +906,11 @@ static int parse_playlist(HLSContext *c, const char *url,
if (key_type != KEY_NONE) {
ff_make_absolute_url(tmp_str, sizeof(tmp_str), url, key);
+ if (!tmp_str[0]) {
+ ret = AVERROR_INVALIDDATA;
+ av_free(seg);
+ goto fail;
+ }
seg->key = av_strdup(tmp_str);
if (!seg->key) {
av_free(seg);
@@ -906,6 +922,13 @@ static int parse_playlist(HLSContext *c, const char *url,
}
ff_make_absolute_url(tmp_str, sizeof(tmp_str), url, line);
+ if (!tmp_str[0]) {
+ ret = AVERROR_INVALIDDATA;
+ if (seg->key)
+ av_free(seg->key);
+ av_free(seg);
+ goto fail;
+ }
seg->url = av_strdup(tmp_str);
if (!seg->url) {
av_free(seg->key);