@@ -1895,14 +1895,27 @@ static int init_section_compare_audio(DASHContext *c)
return 1;
}
-static void copy_init_section(struct representation *rep_dest, struct representation *rep_src)
+static int copy_init_section(struct representation *rep_dest, struct representation *rep_src)
{
+ void *buf, *buf2;
+ buf = av_mallocz(rep_src->init_section->size);
+ if (!buf)
+ return AVERROR(ENOMEM);
+ buf2 = av_mallocz(rep_src->init_sec_buf_size);
+ if (!buf2) {
+ av_free(buf);
+ return AVERROR(ENOMEM);
+ }
*rep_dest->init_section = *rep_src->init_section;
+ rep_dest->init_section->url = buf;
+ memcpy(rep_dest->init_section->url, rep_src->init_section->url, rep_src->init_section->size);
- rep_dest->init_sec_buf = av_mallocz(rep_src->init_sec_buf_size);
+ rep_dest->init_sec_buf = buf2;
memcpy(rep_dest->init_sec_buf, rep_src->init_sec_buf, rep_src->init_sec_data_len);
rep_dest->init_sec_buf_size = rep_src->init_sec_buf_size;
rep_dest->init_sec_data_len = rep_src->init_sec_data_len;
rep_dest->cur_timestamp = rep_src->cur_timestamp;
+
+ return 0;
}
@@ -1942,7 +1955,9 @@ static int dash_read_header(AVFormatContext *s)
for (i = 0; i < c->n_videos; i++) {
struct representation *cur_video = c->videos[i];
if (i > 0 && c->is_init_section_common_video) {
- copy_init_section(cur_video,c->videos[0]);
+ ret = copy_init_section(cur_video,c->videos[0]);
+ if (ret < 0)
+ return ret;
}
ret = open_demux_for_component(s, cur_video);
@@ -1959,7 +1974,9 @@ static int dash_read_header(AVFormatContext *s)
for (i = 0; i < c->n_audios; i++) {
struct representation *cur_audio = c->audios[i];
if (i > 0 && c->is_init_section_common_audio) {
- copy_init_section(cur_audio,c->audios[0]);
+ ret = copy_init_section(cur_audio,c->audios[0]);
+ if (ret < 0)
+ return ret;
}
ret = open_demux_for_component(s, cur_audio);