From ed2112fb36d7407d960b4f44475a700a7c44344c Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 9 Oct 2016 03:05:27 +0200 Subject: avformat/movenc: Check frame rate in mov_write_uuidprof_tag() Signed-off-by: Michael Niedermayer --- libavformat/movenc.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'libavformat/movenc.c') diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 2c155eb8b6..d7c7158483 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4261,7 +4261,7 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s) return update_size(pb, pos); } -static void mov_write_uuidprof_tag(AVIOContext *pb, AVFormatContext *s) +static int mov_write_uuidprof_tag(AVIOContext *pb, AVFormatContext *s) { AVStream *video_st = s->streams[0]; AVCodecParameters *video_par = s->streams[0]->codecpar; @@ -4271,6 +4271,11 @@ static void mov_write_uuidprof_tag(AVIOContext *pb, AVFormatContext *s) int audio_kbitrate = audio_par->bit_rate / 1000; int video_kbitrate = FFMIN(video_par->bit_rate / 1000, 800 - audio_kbitrate); + if (frame_rate < 0 || frame_rate > INT32_MAX) { + av_log(s, AV_LOG_ERROR, "Frame rate %f outside supported range\n", frame_rate / (double)0x10000); + return AVERROR(EINVAL); + } + avio_wb32(pb, 0x94); /* size */ ffio_wfourcc(pb, "uuid"); ffio_wfourcc(pb, "PROF"); @@ -4321,6 +4326,8 @@ static void mov_write_uuidprof_tag(AVIOContext *pb, AVFormatContext *s) avio_wb16(pb, video_par->width); avio_wb16(pb, video_par->height); avio_wb32(pb, 0x010001); /* ? */ + + return 0; } static int mov_write_identification(AVIOContext *pb, AVFormatContext *s) @@ -4345,7 +4352,7 @@ static int mov_write_identification(AVIOContext *pb, AVFormatContext *s) av_log(s, AV_LOG_ERROR, "PSP mode need one video and one audio stream\n"); return AVERROR(EINVAL); } - mov_write_uuidprof_tag(pb, s); + return mov_write_uuidprof_tag(pb, s); } return 0; } -- cgit v1.2.3