avformat/isom: check avio_read() result

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>
This commit is contained in:
Michael Niedermayer 2013-12-21 12:52:23 +01:00
parent b797a00f63
commit 2c635fabbf

View 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 ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext *pb)
{ {
int len, tag; int len, tag;
int ret;
int object_type_id = avio_r8(pb); int object_type_id = avio_r8(pb);
avio_r8(pb); /* stream type */ avio_r8(pb); /* stream type */
avio_rb24(pb); /* buffer size db */ 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); av_free(st->codec->extradata);
if (ff_alloc_extradata(st->codec, len)) if (ff_alloc_extradata(st->codec, len))
return AVERROR(ENOMEM); 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) { if (st->codec->codec_id == AV_CODEC_ID_AAC) {
MPEG4AudioConfig cfg = {0}; MPEG4AudioConfig cfg = {0};
avpriv_mpeg4audio_get_config(&cfg, st->codec->extradata, avpriv_mpeg4audio_get_config(&cfg, st->codec->extradata,