diff --git a/libavformat/webmdashenc.c b/libavformat/webmdashenc.c index 17df1b6a64..76ea4237e2 100644 --- a/libavformat/webmdashenc.c +++ b/libavformat/webmdashenc.c @@ -88,7 +88,7 @@ static double get_duration(AVFormatContext *s) return max / 1000; } -static void write_header(AVFormatContext *s) +static int write_header(AVFormatContext *s) { WebMDashMuxContext *w = s->priv_data; double min_buffer_time = 1.0; @@ -111,7 +111,9 @@ static void write_header(AVFormatContext *s) struct tm gmt_buffer; struct tm *gmt = gmtime_r(&local_time, &gmt_buffer); char gmt_iso[21]; - strftime(gmt_iso, 21, "%Y-%m-%dT%H:%M:%SZ", gmt); + if (!strftime(gmt_iso, 21, "%Y-%m-%dT%H:%M:%SZ", gmt)) { + return AVERROR_UNKNOWN; + } if (w->debug_mode) { av_strlcpy(gmt_iso, "", 1); } @@ -125,6 +127,7 @@ static void write_header(AVFormatContext *s) avio_printf(s->pb, " value=\"%s\"/>\n", w->utc_timing_url); } } + return 0; } static void write_footer(AVFormatContext *s) @@ -474,10 +477,12 @@ static int webm_dash_manifest_write_header(AVFormatContext *s) WebMDashMuxContext *w = s->priv_data; ret = parse_adaptation_sets(s); if (ret < 0) { - free_adaptation_sets(s); - return ret; + goto fail; + } + ret = write_header(s); + if (ret < 0) { + goto fail; } - write_header(s); avio_printf(s->pb, "pb, " start=\"PT%gS\"", start); if (!w->is_live) { @@ -488,14 +493,15 @@ static int webm_dash_manifest_write_header(AVFormatContext *s) for (i = 0; i < w->nb_as; i++) { ret = write_adaptation_set(s, i); if (ret < 0) { - free_adaptation_sets(s); - return ret; + goto fail; } } avio_printf(s->pb, "\n"); write_footer(s); - return 0; +fail: + free_adaptation_sets(s); + return ret < 0 ? ret : 0; } static int webm_dash_manifest_write_packet(AVFormatContext *s, AVPacket *pkt)