avformat/webmdashenc: Check codec types

The WebM DASH Manifest muxer only supports VP8, VP9, Vorbis and Opus,
but there was no check for this. The codec type is used to get a pointer
to a string containing the codec name or NULL if it is not one of those
four codecs. Said pointer has then been used without further checks as
string for the %s conversion specifier in an avio_printf()) call which
is undefined behaviour.

This commit adds a check for the supported codec types.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
(cherry picked from commit cbea58b2b3)
This commit is contained in:
Andreas Rheinhardt 2020-03-30 02:50:02 +02:00
parent e4fd6ef46a
commit 84b2ec226a
1 changed files with 8 additions and 0 deletions

View File

@ -517,6 +517,14 @@ static int webm_dash_manifest_write_header(AVFormatContext *s)
double start = 0.0; double start = 0.0;
int ret; int ret;
WebMDashMuxContext *w = s->priv_data; WebMDashMuxContext *w = s->priv_data;
for (unsigned i = 0; i < s->nb_streams; i++) {
enum AVCodecID codec_id = s->streams[i]->codecpar->codec_id;
if (codec_id != AV_CODEC_ID_VP8 && codec_id != AV_CODEC_ID_VP9 &&
codec_id != AV_CODEC_ID_VORBIS && codec_id != AV_CODEC_ID_OPUS)
return AVERROR(EINVAL);
}
ret = parse_adaptation_sets(s); ret = parse_adaptation_sets(s);
if (ret < 0) { if (ret < 0) {
goto fail; goto fail;