]> git.sesse.net Git - ffmpeg/commitdiff
avformat/webmdashenc: Check codec types
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Mon, 30 Mar 2020 00:50:02 +0000 (02:50 +0200)
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Tue, 7 Apr 2020 13:01:10 +0000 (15:01 +0200)
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>
libavformat/webmdashenc.c

index 7847659c63c4449251cb8096c284a8b6d8ae9606..016de8af6ba2fc8ca3625ce7be9be8a8d8438c55 100644 (file)
@@ -516,6 +516,14 @@ static int webm_dash_manifest_write_header(AVFormatContext *s)
     double start = 0.0;
     int ret;
     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);
     if (ret < 0) {
         goto fail;