mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
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>
This commit is contained in:
parent
1ef30571a0
commit
0841063ce6
@ -4181,14 +4181,17 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||
return -1;
|
||||
}
|
||||
if (!matroska->tracks.nb_elem || !s->nb_streams) {
|
||||
matroska_read_close(s);
|
||||
av_log(s, AV_LOG_ERROR, "No track found\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!matroska->is_live) {
|
||||
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, AV_DICT_DONT_STRDUP_VAL);
|
||||
|
||||
@ -4211,7 +4214,7 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||
ret = webm_dash_manifest_cues(s, init_range);
|
||||
if (ret < 0) {
|
||||
av_log(s, AV_LOG_ERROR, "Error parsing Cues\n");
|
||||
return ret;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4221,6 +4224,9 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||
matroska->bandwidth, 0);
|
||||
}
|
||||
return 0;
|
||||
fail:
|
||||
matroska_read_close(s);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int webm_dash_manifest_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
Loading…
Reference in New Issue
Block a user