---
libavformat/rmdec.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c
index eb0f3c5..aee7c54 100644
--- a/libavformat/rmdec.c
+++ b/libavformat/rmdec.c
@@ -91,8 +91,11 @@ static int rm_read_extradata(AVIOContext *pb, AVCodecContext
*avctx, unsigned si
return AVERROR(ENOMEM);
avctx->extradata_size = avio_read(pb, avctx->extradata, size);
memset(avctx->extradata + avctx->extradata_size, 0,
FF_INPUT_BUFFER_PADDING_SIZE);
- if (avctx->extradata_size != size)
+ if (avctx->extradata_size != size) {
+ av_free(avctx->extradata);
+ avctx->extradata_size = 0;
return AVERROR(EIO);
+ }
return 0;
}
@@ -110,6 +113,8 @@ static void rm_read_metadata(AVFormatContext *s,
AVIOContext *pb, int wide)
RMStream *ff_rm_alloc_rmstream (void)
{
RMStream *rms = av_mallocz(sizeof(RMStream));
+ if (!rms)
+ return NULL;
rms->curpic_num = -1;
return rms;
}
@@ -417,6 +422,8 @@ static int rm_read_header_old(AVFormatContext *s)
if (!st)
return -1;
st->priv_data = ff_rm_alloc_rmstream();
+ if (!st->priv_data)
+ return AVERROR(ENOMEM);
return rm_read_audio_stream_info(s, s->pb, st, st->priv_data, 1);
}
@@ -494,9 +501,13 @@ static int rm_read_header(AVFormatContext *s)
get_str8(pb, buf, sizeof(buf)); /* mimetype */
st->codec->codec_type = AVMEDIA_TYPE_DATA;
st->priv_data = ff_rm_alloc_rmstream();
+ if (!st->priv_data)
+ return AVERROR(ENOMEM);
if (ff_rm_read_mdpr_codecdata(s, s->pb, st, st->priv_data,
- avio_rb32(pb)) < 0)
+ avio_rb32(pb)) < 0) {
+ ff_rm_free_rmstream(st->priv_data);
return -1;
+ }
break;
case MKTAG('D', 'A', 'T', 'A'):
goto header_end;
--
1.9.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel