]> git.sesse.net Git - ffmpeg/commitdiff
avformat/dashdec: Avoid segfault when URL template is unexpectedly missing
authorsfan5 <sfan5@live.de>
Thu, 4 Feb 2021 01:33:17 +0000 (09:33 +0800)
committerSteven Liu <liuqi05@kuaishou.com>
Thu, 4 Feb 2021 02:30:39 +0000 (10:30 +0800)
This isn't supposed to happen, but unfinished support for non-templated
manifests and lack of e.g. presentationTimeOffset handling can provoke
such a situation even with well-formed input.

libavformat/dashdec.c

index 04dbdb668e896920cc2ab6a3acbb5762feecdc51..b82805c9ce7d6ed6fab39156b2372469e5a8dad6 100644 (file)
@@ -1626,8 +1626,15 @@ static struct fragment *get_current_fragment(struct representation *pls)
         }
     }
     if (seg) {
-        char *tmpfilename= av_mallocz(c->max_url_size);
+        char *tmpfilename;
+        if (!pls->url_template) {
+            av_log(pls->parent, AV_LOG_ERROR, "Cannot get fragment, missing template URL\n");
+            av_free(seg);
+            return NULL;
+        }
+        tmpfilename = av_mallocz(c->max_url_size);
         if (!tmpfilename) {
+            av_free(seg);
             return NULL;
         }
         ff_dash_fill_tmpl_params(tmpfilename, c->max_url_size, pls->url_template, 0, pls->cur_seq_no, 0, get_segment_start_time_based_on_timeline(pls, pls->cur_seq_no));
@@ -1638,6 +1645,7 @@ static struct fragment *get_current_fragment(struct representation *pls)
             if (!seg->url) {
                 av_log(pls->parent, AV_LOG_ERROR, "Cannot resolve template url '%s'\n", pls->url_template);
                 av_free(tmpfilename);
+                av_free(seg);
                 return NULL;
             }
         }