aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-10-09 03:05:27 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-10-10 00:58:16 +0200
commited2112fb36d7407d960b4f44475a700a7c44344c (patch)
tree8399238beeb999c6d22734135b53104934805b79
parent21bffa93a6fc73e1f1859f8bc224409eaaf27658 (diff)
downloadffmpeg-ed2112fb36d7407d960b4f44475a700a7c44344c.tar.gz
avformat/movenc: Check frame rate in mov_write_uuidprof_tag()
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/movenc.c11
1 files changed, 9 insertions, 2 deletions
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;
}