mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/matroskadec: Fix memleaks in WebM DASH manifest demuxer
In certain error scenarios, the underlying Matroska demuxer was not
properly closed, causing leaks.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
(cherry picked from commit 0841063ce6
)
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
parent
6f0304b9d9
commit
5084210d8c
|
@ -3961,14 +3961,17 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!matroska->tracks.nb_elem || !s->nb_streams) {
|
if (!matroska->tracks.nb_elem || !s->nb_streams) {
|
||||||
matroska_read_close(s);
|
|
||||||
av_log(s, AV_LOG_ERROR, "No track found\n");
|
av_log(s, AV_LOG_ERROR, "No track found\n");
|
||||||
return AVERROR_INVALIDDATA;
|
ret = AVERROR_INVALIDDATA;
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!matroska->is_live) {
|
if (!matroska->is_live) {
|
||||||
buf = av_asprintf("%g", matroska->duration);
|
buf = av_asprintf("%g", matroska->duration);
|
||||||
if (!buf) return AVERROR(ENOMEM);
|
if (!buf) {
|
||||||
|
ret = AVERROR(ENOMEM);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
av_dict_set(&s->streams[0]->metadata, DURATION, buf, 0);
|
av_dict_set(&s->streams[0]->metadata, DURATION, buf, 0);
|
||||||
av_free(buf);
|
av_free(buf);
|
||||||
|
|
||||||
|
@ -3991,7 +3994,7 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||||
ret = webm_dash_manifest_cues(s, init_range);
|
ret = webm_dash_manifest_cues(s, init_range);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
av_log(s, AV_LOG_ERROR, "Error parsing Cues\n");
|
av_log(s, AV_LOG_ERROR, "Error parsing Cues\n");
|
||||||
return ret;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4001,6 +4004,9 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||||
matroska->bandwidth, 0);
|
matroska->bandwidth, 0);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
fail:
|
||||||
|
matroska_read_close(s);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int webm_dash_manifest_read_packet(AVFormatContext *s, AVPacket *pkt)
|
static int webm_dash_manifest_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
|
|
Loading…
Reference in New Issue