[FFmpeg-devel] [PATCH] avformat/oggparseogm: unknown codec triggers error

Chris Cunningham chcunningham at chromium.org
Fri Jun 14 04:15:32 EEST 2019


Only "succeed" to read a header if the codec is valid. Otherwise
return AVERROR_INVALIDDATA.
---
 libavformat/oggparseogm.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/libavformat/oggparseogm.c b/libavformat/oggparseogm.c
index a07453760b..e71298d39a 100644
--- a/libavformat/oggparseogm.c
+++ b/libavformat/oggparseogm.c
@@ -24,9 +24,9 @@
 
 #include <stdlib.h>
 
-#include "libavutil/intreadwrite.h"
-
+#include "libavcodec/avcodec.h"
 #include "libavcodec/bytestream.h"
+#include "libavutil/intreadwrite.h"
 
 #include "avformat.h"
 #include "internal.h"
@@ -58,6 +58,8 @@ ogm_header(AVFormatContext *s, int idx)
             tag = bytestream2_get_le32(&p);
             st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, tag);
             st->codecpar->codec_tag = tag;
+            if (st->codecpar->codec_id == AV_CODEC_ID_NONE)
+                return AVERROR_INVALIDDATA;
             if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4)
                 st->need_parsing = AVSTREAM_PARSE_HEADERS;
         } else if (bytestream2_peek_byte(&p) == 't') {
@@ -73,6 +75,8 @@ ogm_header(AVFormatContext *s, int idx)
             acid[4] = 0;
             cid = strtol(acid, NULL, 16);
             st->codecpar->codec_id = ff_codec_get_id(ff_codec_wav_tags, cid);
+            if (st->codecpar->codec_id == AV_CODEC_ID_NONE)
+                return AVERROR_INVALIDDATA;
             // our parser completely breaks AAC in Ogg
             if (st->codecpar->codec_id != AV_CODEC_ID_AAC)
                 st->need_parsing = AVSTREAM_PARSE_FULL;
@@ -147,6 +151,8 @@ ogm_dshow_header(AVFormatContext *s, int idx)
 
         st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
         st->codecpar->codec_id = ff_codec_get_id(ff_codec_bmp_tags, AV_RL32(p + 68));
+        if (st->codecpar->codec_id == AV_CODEC_ID_NONE)
+            return AVERROR_INVALIDDATA;
         avpriv_set_pts_info(st, 64, AV_RL64(p + 164), 10000000);
         st->codecpar->width = AV_RL32(p + 176);
         st->codecpar->height = AV_RL32(p + 180);
@@ -156,6 +162,8 @@ ogm_dshow_header(AVFormatContext *s, int idx)
 
         st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
         st->codecpar->codec_id = ff_codec_get_id(ff_codec_wav_tags, AV_RL16(p + 124));
+        if (st->codecpar->codec_id == AV_CODEC_ID_NONE)
+            return AVERROR_INVALIDDATA;
         st->codecpar->channels = AV_RL16(p + 126);
         st->codecpar->sample_rate = AV_RL32(p + 128);
         st->codecpar->bit_rate = AV_RL32(p + 132) * 8;
-- 
2.22.0.rc2.383.gf4fbbf30c2-goog



More information about the ffmpeg-devel mailing list