OSDN Git Service

avformat/isom: check avio_read() result
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Dec 2013 11:52:23 +0000 (12:52 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 22 Dec 2013 00:48:33 +0000 (01:48 +0100)
Fixes use of uninitialized memory
Fixes: msan_uninit-mem_7f7aa4151661_4885_dmbts3.ts
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/isom.c

index 19ec57b..8a85fe3 100644 (file)
@@ -438,6 +438,7 @@ static const AVCodecTag mp4_audio_types[] = {
 int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
 {
     int len, tag;
+    int ret;
     int object_type_id = avio_r8(pb);
     avio_r8(pb); /* stream type */
     avio_rb24(pb); /* buffer size db */
@@ -459,7 +460,8 @@ int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext
         av_free(st->codec->extradata);
         if (ff_alloc_extradata(st->codec, len))
             return AVERROR(ENOMEM);
-        avio_read(pb, st->codec->extradata, len);
+        if ((ret = avio_read(pb, st->codec->extradata, len)) != len)
+            return ret < 0 ? ret : AVERROR_INVALIDDATA;
         if (st->codec->codec_id == AV_CODEC_ID_AAC) {
             MPEG4AudioConfig cfg = {0};
             avpriv_mpeg4audio_get_config(&cfg, st->codec->extradata,